锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品午夜一区二区福利,久久伊人中文无码,久久精品国产WWW456C0Mhttp://www.shnenglu.com/Joe/archive/2011/05/24/147036.htmlsimplyzhaosimplyzhaoTue, 24 May 2011 07:24:00 GMThttp://www.shnenglu.com/Joe/archive/2011/05/24/147036.htmlhttp://www.shnenglu.com/Joe/comments/147036.htmlhttp://www.shnenglu.com/Joe/archive/2011/05/24/147036.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/147036.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/147036.html銆銆鍦ㄨ繖閲岄『渚垮鏉′歡緙栬瘧錛?ifdef, #else, #endif, #if絳夛級榪涜璇存槑銆備互涓嬪垎3縐嶆儏鍐碉細

銆銆1. 鎯呭喌1錛?br />銆銆#ifdef _XXXX
銆銆    ...紼嬪簭孌?...
銆銆#else
銆銆    ...紼嬪簭孌?...
銆銆#endif
銆銆榪欒〃鏄庡鏋滄爣璇嗙_XXXX宸茶#define鍛戒護瀹氫箟榪囧垯瀵圭▼搴忔1榪涜緙栬瘧錛涘惁鍒欏紼嬪簭孌?榪涜緙栬瘧銆?/span>

銆銆2:鎯呭喌2錛?br />銆銆#ifndef _XXXX
銆銆    ...紼嬪簭孌?...
銆銆#else
銆銆    ...紼嬪簭孌?...
銆銆#endif
銆銆榪欓噷浣跨敤浜?ifndef錛岃〃紺虹殑鏄痠f not def銆傚綋鐒舵槸鍜?ifdef鐩稿弽鐨勭姸鍐碉紙濡傛灉娌℃湁瀹氫箟浜嗘爣璇嗙_XXXX錛岄偅涔堟墽琛岀▼搴忔1錛屽惁鍒欐墽琛岀▼搴忔2錛夈?/span>

銆銆3錛氭儏鍐?錛?br />銆銆#if 甯擱噺
銆銆    ...紼嬪簭孌?...
      #else
銆銆    ...紼嬪簭孌?...
銆銆#endif
銆銆榪欓噷琛ㄧず錛屽鏋滃父閲忎負鐪燂紙闈?錛岄殢渚夸粈涔堟暟瀛楋紝鍙涓嶆槸0錛夛紝灝辨墽琛岀▼搴忔1錛屽惁鍒欐墽琛岀▼搴忔2銆?br />



simplyzhao 2011-05-24 15:24 鍙戣〃璇勮
]]>
operator new/delete涓?new/delete operatorhttp://www.shnenglu.com/Joe/archive/2011/05/24/147028.htmlsimplyzhaosimplyzhaoTue, 24 May 2011 06:12:00 GMThttp://www.shnenglu.com/Joe/archive/2011/05/24/147028.htmlhttp://www.shnenglu.com/Joe/comments/147028.htmlhttp://www.shnenglu.com/Joe/archive/2011/05/24/147028.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/147028.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/147028.htmlC++涓殑operator new涓巒ew operator錛岀湅涓婂幓鎸哄儚鐨勪袱濮愬錛屽嵈鏈夊ぉ澹や箣鍒?

operator new

錛?錛?鍙垎閰嶆墍瑕佹眰鐨勭┖闂達紝涓嶈皟鐢ㄧ浉鍏沖璞$殑鏋勯犲嚱鏁般傚綋鏃犳硶婊¤凍鎵瑕佹眰鍒嗛厤鐨勭┖闂存椂錛屽垯

        ->濡傛灉鏈塶ew_handler錛屽垯璋冪敤new_handler錛屽惁鍒?

        ->濡傛灉娌¤姹備笉鎶涘嚭寮傚父錛堜互nothrow鍙傛暟琛ㄨ揪錛夛紝鍒欐墽琛宐ad_alloc寮傚父錛屽惁鍒?

        ->榪斿洖0

錛?錛?鍙互琚噸杞?

錛?錛?閲嶈澆鏃訛紝榪斿洖綾誨瀷蹇呴』澹版槑涓簐oid*

錛?錛?閲嶈澆鏃訛紝絎竴涓弬鏁扮被鍨嬪繀欏諱負琛ㄨ揪瑕佹眰鍒嗛厤絀洪棿鐨勫ぇ灝忥紙瀛楄妭錛夛紝綾誨瀷涓簊ize_t

錛?錛?閲嶈澆鏃訛紝鍙互甯﹀叾瀹冨弬鏁?

new operator

錛?錛?璋冪敤operator new鍒嗛厤瓚沖鐨勭┖闂達紝騫惰皟鐢ㄧ浉鍏沖璞$殑鏋勯犲嚱鏁?

錛?錛?涓嶅彲浠ヨ閲嶈澆

鐩稿簲鍦幫紝operator delete涓巇elete operator鏈夌浉浼肩殑鐗規с?

涓句釜渚嬪瓙

class X
{
public:
…………
    static void* operator new(size_t size)
{
    return ::operator new(size);
}
static void operator delete(void* pointee)
{
    ::operator delete(pointee);
}
…………
};
X* px = new X();

璇ヨ浠g爜涓殑new涓簄ew operator錛屽畠灝嗚皟鐢ㄧ被X涓殑operator new錛屼負璇ョ被鐨勫璞″垎閰嶇┖闂達紝鐒跺悗璋冪敤褰撳墠瀹炰緥鐨勬瀯閫犲嚱鏁般?

delete px;

璇ヨ浠g爜涓殑delete涓篸elete operator錛屽畠灝嗚皟鐢ㄨ瀹炰緥鐨勬瀽鏋勫嚱鏁幫紝鐒跺悗璋冪敤綾籜涓殑operator delete錛屼互閲婃斁璇ュ疄渚嬪崰鐢ㄧ殑絀洪棿銆?

new operator涓巇elete operator鐨勮涓烘槸涓嶈兘澶熶篃涓嶅簲璇ヨ鏀瑰彉錛岃繖鏄疌++鏍囧噯浣滃嚭鐨勬壙璇恒傝宱perator new涓巓perator delete鍜孋璇█涓殑malloc涓巉ree瀵瑰簲錛屽彧璐熻矗鍒嗛厤鍙婇噴鏀劇┖闂淬備絾浣跨敤operator new鍒嗛厤鐨勭┖闂村繀欏諱嬌鐢╫perator delete鏉ラ噴鏀撅紝鑰屼笉鑳戒嬌鐢╢ree錛屽洜涓哄畠浠鍐呭瓨浣跨敤鐨勭櫥璁版柟寮忎笉鍚屻傚弽榪囨潵浜︽槸涓鏍楓?

浣犲彲浠ラ噸杞給perator new鍜宱perator delete浠ュ疄鐜板鍐呭瓨綆$悊鐨勪笉鍚岃姹傦紝浣嗕綘涓嶈兘閲嶈澆new operator鎴杁elete operator浠ユ敼鍙樺畠浠殑琛屼負銆?

褰撻噸杞給perator new鏃訛紝鍙互鎻愪緵鏇村鐨勫弬鏁幫紝鍦╪ew涓涓璞℃椂錛岄氳繃鍦ㄥ叧閿瓧new鍚庣殑鎷彿浼犻掗澶栫殑鍙傛暟銆傛瘮濡備互涓嬬殑綾?

class A
{
public:
    …………
    static void* operator new(size_t size, const string& example)
{
    cout << example << endl;
    return ::operator new(size);
}
…………
};
A* pa = new (“This will be printed out in operator new”) A();

鏂版爣鍑嗙殑C++鍏佽浠ヨ繖鏍風殑鏂瑰紡浼犻掍竴涓悕涓簄othrow鐨勫弬鏁幫紝浠ヨ〃鏄庡綋涓鴻瀵硅薄鍒嗛厤絀洪棿澶辮觸鏃訛紝涓嶆姏鍑哄紓甯革紝鑰屾槸榪斿洖0錛屼互鍏煎鏃ф爣鍑唍ew鐨勮涓恒傛瘮濡?

class B {};
B* pb = new (nothrow) B();

褰撶劧榪欏彧鑳藉閭d簺浣跨敤榛樿operator new鎿嶄綔絎︾殑綾匯傚宸茬粡閲嶈澆浜唎perator new鐨勭被錛堟瘮濡備笂闈㈢殑X鍜孉錛夛紝濡傛灉涓嶅0鏄庤兘鎺ュ彈nothrow鍙傛暟錛岃嚜鐒舵棤娉曚韓鍙桟++鏍囧噯甯︽潵鐨勭ぜ鐗┿?

--------

鎴戜滑緇忓父鐪嬪埌榪欎箞涓鍙ヨ瘽錛?operator new 鍙互閲嶈澆錛?placement new 涓嶅彲閲嶈澆銆傚叾瀹炴澶勬墍璇寸殑涓嶅彲閲嶈澆搴旇鏄寚鍏ㄥ眬鐨?placement new 涓嶅彲閲嶈澆錛屽浜庣被鍩熶腑鐨?placement new 鏄彲浠ラ噸杞界殑錛岃屼笖鍙閲嶈澆浜嗕換浣曚竴縐嶅艦寮忕殑 operator new 閮藉簲璇ラ『渚塊噸杞?placement new 錛?鍗?void * operator new(std::size_t count, void *ptr) 銆?

鎿嶄綔絎﹂噸杞戒竴鑸敤浜庣壒瀹氱被鍨嬶紝鍚嶅瓧瑙f瀽榪囩▼鍚屼竴鑸殑鍑芥暟閲嶈澆銆?Operator new 鐢變簬鍏剁壒孌婃э紝緙栬瘧鍣ㄦ彁渚涗簡榛樿鎻愪緵 6 縐嶅叏灞閲嶈澆褰㈠紡錛屽悓鏃惰繕鍏佽鐢ㄦ埛鎻愪緵鑷畾涔夌殑鍏ㄥ眬 operator new 錛屽叾鍙傛暟鐢氳嚦鍙互鍜屽叏灞鐗堟湰涓鏍鳳紝闄ゅ叏灞 placement new 澶栥傚浜庣被鍩燂紝浠諱綍褰㈠紡鐨?new 閮芥槸鍙互閲嶈澆鐨勶紝鍖呮嫭 placement new 褰㈠紡銆?

 

鍏ㄥ眬鐨?operator new( 鍑芥暟 ) 鏈夊叚縐嶉噸杞藉艦寮?

void *operator new(std::size_t count)

    throw(std::bad_alloc);           // 涓鑸殑鐗堟湰

 

void *operator new(std::size_t count,   // 鍏煎鏃╃増鏈殑 new

    const std::nothrow_t&) throw();   // 鍐呭瓨鍒嗛厤澶辮觸涓嶄細鎶涘嚭寮傚父

 

void *operator new(std::size_t count, void *ptr) throw();  //placement 鐗堟湰

                                      

void *operator new[](std::size_t count)  //

    throw(std::bad_alloc);

 

void *operator new[](std::size_t count,  //

    const std::nothrow_t&) throw();

 

void *operator new[](std::size_t count, void *ptr) throw();

 

閲嶈澆 operator new 瑙勫垯

閲嶈澆 operator new 鐨勫弬鏁頒釜鏁版槸鍙互浠繪剰鐨?, 鍙渶瑕佷繚璇佺涓涓弬鏁頒負 size_t, 榪斿洖綾誨瀷涓?void * 鍗沖彲 , 鑰屼笖鍏墮噸杞界殑鍙傛暟綾誨瀷涔熶笉蹇呭寘鍚嚜瀹氫箟綾誨瀷 . 鏇翠竴鑸殑璇?, operator new 鐨勯噸杞芥洿鍍忔槸涓涓嚱鏁扮殑閲嶈澆 , 鑰屼笉鏄竴涓搷浣滅鐨勯噸杞?. 濡傦細

 

鍏ㄥ眬閲嶈澆紺轟緥錛?

void* operator new(size_t size)  // 閲嶈澆鎴愬姛

{

   printf("global new\n");

   return malloc(size);

   //return ::operator new(size);  // 閫掑綊璋冪敤鎻愮ず (warning)

}

 

//void *operator new(std::size_t size, void *ptr) // 鏃犳硶閲嶈澆

//{

//     printf("global new\n");

//     return ::operator new(size,ptr);

//}

 

void * operator new(size_t size, const std::nothrow_t& e) // 閲嶈澆鎴愬姛 , 閫掑綊璋冪敤鎻愮ず (warning)

{

       printf("global new\n");

       return ::operator new(size, e);

}

 

涓鑸艦寮忕殑 operator new 閲嶈澆紺轟緥錛?

void * operator new(size_t size, int x, int y, int z)

{

    ...

}

X * pX = new (1, 2, 3) X;

 

char data[1000][sizeof(foo)];

inline void* operator new(size_t size, int n)

{

        return data[n];

}

灝卞彲浠ヤ嬌鐢ㄨ繖鏍鋒湁瓚g殑璇硶鏉ュ垱寤哄璞?:

foo *p=new(6) foo(); // 鎶婂璞″垱寤哄湪 data 鐨勭鍏釜鍗曞厓涓?nbsp; 



simplyzhao 2011-05-24 14:12 鍙戣〃璇勮
]]>
#ifdef __cplusplus 鏄粈涔堟剰鎬濓紵http://www.shnenglu.com/Joe/archive/2011/05/22/146936.htmlsimplyzhaosimplyzhaoSun, 22 May 2011 09:57:00 GMThttp://www.shnenglu.com/Joe/archive/2011/05/22/146936.htmlhttp://www.shnenglu.com/Joe/comments/146936.htmlhttp://www.shnenglu.com/Joe/archive/2011/05/22/146936.html#Feedback0http://www.shnenglu.com/Joe/comments/commentRss/146936.htmlhttp://www.shnenglu.com/Joe/services/trackbacks/146936.html

鏃跺父鍦╟pp鐨勪唬鐮佷箣涓湅鍒拌繖鏍風殑浠g爜:

#ifdef __cplusplus
extern "C" {
#endif

//涓孌典唬鐮?

#ifdef __cplusplus
}
#endif
銆銆榪欐牱鐨勪唬鐮佸埌搴曟槸浠涔堟剰鎬濆憿錛熼鍏堬紝__cplusplus鏄痗pp涓殑鑷畾涔夊畯錛岄偅涔堝畾涔変簡榪欎釜瀹忕殑璇濊〃紺鴻繖鏄竴孌礳pp鐨勪唬鐮侊紝涔熷氨鏄錛屼笂闈㈢殑浠g爜鐨勫惈涔夋槸:濡傛灉榪欐槸涓孌礳pp鐨勪唬鐮侊紝閭d箞鍔犲叆extern "C"{鍜寎澶勭悊鍏朵腑鐨勪唬鐮併?

銆銆瑕佹槑鐧戒負浣曚嬌鐢╡xtern "C"錛岃繕寰椾粠cpp涓鍑芥暟鐨勯噸杞藉鐞嗗紑濮嬭璧楓傚湪c++涓紝涓轟簡鏀寔閲嶈澆鏈哄埗錛屽湪緙栬瘧鐢熸垚鐨勬眹緙栫爜涓紝瑕佸鍑芥暟鐨勫悕瀛楄繘琛屼竴浜涘鐞嗭紝鍔犲叆姣斿鍑芥暟鐨勮繑鍥炵被鍨嬬瓑絳?鑰屽湪C涓紝鍙槸綆鍗曠殑鍑芥暟鍚嶅瓧鑰屽凡錛屼笉浼氬姞鍏ュ叾浠栫殑淇℃伅.涔熷氨鏄:C++鍜孋瀵逛駭鐢熺殑鍑芥暟鍚嶅瓧鐨勫鐞嗘槸涓嶄竴鏍風殑.

銆銆姣斿涓嬮潰鐨勪竴孌電畝鍗曠殑鍑芥暟錛屾垜浠湅鐪嬪姞鍏ュ拰涓嶅姞鍏xtern "C"浜х敓鐨勬眹緙栦唬鐮侀兘鏈夊摢浜涘彉鍖?

int f(void)
{
return 1;
}
銆銆鍦ㄥ姞鍏xtern "C"鐨勬椂鍊欎駭鐢熺殑姹囩紪浠g爜鏄?

.file "test.cxx"
.text
.align 2
.globl _f
.def _f; .scl 2; .type 32; .endef
_f:
pushl %ebp
movl %esp錛?%ebp
movl $1錛?%eax
popl %ebp
ret
銆銆浣嗘槸涓嶅姞鍏ヤ簡extern "C"涔嬪悗

.file "test.cxx"
.text
.align 2
.globl __Z1fv
.def __Z1fv; .scl 2; .type 32; .endef
__Z1fv:
pushl %ebp
movl %esp錛?%ebp
movl $1錛?%eax
popl %ebp
ret
銆銆涓ゆ姹囩紪浠g爜鍚屾牱閮芥槸浣跨敤gcc -S鍛戒護浜х敓鐨勶紝鎵鏈夌殑鍦版柟閮芥槸涓鏍風殑錛屽敮鐙槸浜х敓鐨勫嚱鏁板悕錛屼竴涓槸_f錛屼竴涓槸__Z1fv銆?

銆銆鏄庣櫧浜嗗姞鍏ヤ笌涓嶅姞鍏xtern "C"涔嬪悗瀵瑰嚱鏁板悕縐頒駭鐢熺殑褰卞搷錛屾垜浠戶緇垜浠殑璁ㄨ:涓轟粈涔堥渶瑕佷嬌鐢╡xtern "C"鍛紵C++涔嬬埗鍦ㄨ璁++涔嬫椂錛岃冭檻鍒板綋鏃跺凡緇忓瓨鍦ㄤ簡澶ч噺鐨凜浠g爜錛屼負浜嗘敮鎸佸師鏉ョ殑C浠g爜鍜屽凡緇忓啓濂紺搴擄紝闇瑕佸湪C++涓敖鍙兘鐨勬敮鎸丆錛岃宔xtern "C"灝辨槸鍏朵腑鐨勪竴涓瓥鐣ャ?

銆銆璇曟兂榪欐牱鐨勬儏鍐?涓涓簱鏂囦歡宸茬粡鐢–鍐欏ソ浜嗚屼笖榪愯寰楀緢鑹ソ錛岃繖涓椂鍊欐垜浠渶瑕佷嬌鐢ㄨ繖涓簱鏂囦歡錛屼絾鏄垜浠渶瑕佷嬌鐢–++鏉ュ啓榪欎釜鏂扮殑浠g爜銆傚鏋滆繖涓唬鐮佷嬌鐢ㄧ殑鏄疌++鐨勬柟寮忛摼鎺ヨ繖涓狢搴撴枃浠剁殑璇濓紝閭d箞灝變細鍑虹幇閾炬帴閿欒.鎴戜滑鏉ョ湅涓孌典唬鐮?棣栧厛錛屾垜浠嬌鐢–鐨勫鐞嗘柟寮忔潵鍐欎竴涓嚱鏁幫紝涔熷氨鏄鍋囪榪欎釜鍑芥暟褰撴椂鏄敤C鍐欐垚鐨?

//f1.c
extern "C"
{
void f1()
{
return;
}
}
銆銆緙栬瘧鍛戒護鏄?gcc -c f1.c -o f1.o 浜х敓浜嗕竴涓彨f1.o鐨勫簱鏂囦歡銆傚啀鍐欎竴孌典唬鐮佽皟鐢ㄨ繖涓猣1鍑芥暟:

// test.cxx
//榪欎釜extern琛ㄧずf1鍑芥暟鍦ㄥ埆鐨勫湴鏂瑰畾涔夛紝榪欐牱鍙互閫氳繃
//緙栬瘧錛屼絾鏄摼鎺ョ殑鏃跺欒繕鏄渶瑕?
//閾炬帴涓婂師鏉ョ殑搴撴枃浠?
extern void f1();

int main()
{
f1();

return 0;
}
銆銆閫氳繃gcc -c test.cxx -o test.o 浜х敓涓涓彨test.o鐨勬枃浠躲傜劧鍚庯紝鎴戜滑浣跨敤gcc test.o f1.o鏉ラ摼鎺ヤ袱涓枃浠訛紝鍙槸鍑洪敊浜嗭紝閿欒鐨勬彁紺烘槸:

test.o(.text + 0x1f):test.cxx: undefine reference to 'f1()'
銆銆涔熷氨鏄錛屽湪緙栬瘧test.cxx鐨勬椂鍊欑紪璇戝櫒鏄嬌鐢–++鐨勬柟寮忔潵澶勭悊f1()鍑芥暟鐨勶紝浣嗘槸瀹為檯涓婇摼鎺ョ殑搴撴枃浠跺嵈鏄敤C鐨勬柟寮忔潵澶勭悊鍑芥暟鐨勶紝鎵浠ュ氨浼氬嚭鐜伴摼鎺ヨ繃涓嶅幓鐨勯敊璇?鍥犱負閾炬帴鍣ㄦ壘涓嶅埌鍑芥暟銆?

銆銆鍥犳錛屼負浜嗗湪C++浠g爜涓皟鐢ㄧ敤C鍐欐垚鐨勫簱鏂囦歡錛屽氨闇瑕佺敤extern "C"鏉ュ憡璇夌紪璇戝櫒:榪欐槸涓涓敤C鍐欐垚鐨勫簱鏂囦歡錛岃鐢–鐨勬柟寮忔潵閾炬帴瀹冧滑銆?

銆銆姣斿錛岀幇鍦ㄦ垜浠湁浜嗕竴涓狢搴撴枃浠訛紝瀹冪殑澶存枃浠舵槸f.h錛屼駭鐢熺殑lib鏂囦歡鏄痜.lib錛岄偅涔堟垜浠鏋滆鍦–++涓嬌鐢ㄨ繖涓簱鏂囦歡錛屾垜浠渶瑕佽繖鏍峰啓:

extern "C"
{
#include "f.h"
}
銆銆鍥炲埌涓婇潰鐨勯棶棰橈紝濡傛灉瑕佹敼姝i摼鎺ラ敊璇紝鎴戜滑闇瑕佽繖鏍峰瓙鏀瑰啓test.cxx:

extern "C"
{
extern void f1();
}

int main()
{
f1();

return 0;
}
銆銆閲嶆柊緙栬瘧騫朵笖閾炬帴灝卞彲浠ヨ繃鍘諱簡.

銆銆鎬葷粨

銆銆C鍜孋++瀵瑰嚱鏁扮殑澶勭悊鏂瑰紡鏄笉鍚岀殑.extern "C"鏄嬌C++鑳藉璋冪敤C鍐欎綔鐨勫簱鏂囦歡鐨勪竴涓墜孌碉紝濡傛灉瑕佸緙栬瘧鍣ㄦ彁紺轟嬌鐢–鐨勬柟寮忔潵澶勭悊鍑芥暟鐨勮瘽錛岄偅涔堝氨瑕佷嬌鐢╡xtern "C"鏉ヨ鏄庛?/p>

simplyzhao 2011-05-22 17:57 鍙戣〃璇勮
]]>
日本福利片国产午夜久久| 久久亚洲国产成人精品无码区| 亚洲伊人久久综合中文成人网| 久久综合鬼色88久久精品综合自在自线噜噜| 曰曰摸天天摸人人看久久久| 国产午夜精品久久久久九九电影| 色综合久久天天综线观看| 亚洲伊人久久精品影院| …久久精品99久久香蕉国产| 久久免费国产精品| 狠狠色丁香久久婷婷综合五月 | 久久综合五月丁香久久激情| 久久婷婷色香五月综合激情| 久久精品成人免费网站| 亚洲精品视频久久久| 日本精品久久久久中文字幕| 三上悠亚久久精品| 99久久综合国产精品免费| 91秦先生久久久久久久| 99精品国产在热久久无毒不卡| 久久只有这精品99| 国产精品99久久不卡| 国产精品久久国产精麻豆99网站| 亚洲人成网站999久久久综合| 99久久国产亚洲高清观看2024| 亚洲精品午夜国产VA久久成人| 亚洲一区二区三区日本久久九| 丁香五月综合久久激情| 国产成人无码久久久精品一| 色狠狠久久综合网| 午夜精品久久久久久久无码| 99国内精品久久久久久久| 精品久久777| 国产欧美一区二区久久| 国内精品久久久久久久97牛牛| 久久久久精品国产亚洲AV无码| 色欲综合久久躁天天躁| 亚洲国产综合久久天堂| 色狠狠久久综合网| 久久人妻无码中文字幕| 久久亚洲私人国产精品vA|