锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
瀵笴OM鎺ュ彛鍙婂叾浣跨敤鐨勬暟鎹被鍨嬫潵璇達紝鏄惁閲囩敤緇熶竴鐨勯摼鎺ヨ鑼冿紝瀵瑰叾浜岃繘鍒跺吋瀹規у拰鍙Щ妞嶆ч兘娌℃湁褰卞搷銆傚洜涓鴻繛鎺ヨ鑼冧富瑕佸獎鍝嶅埌鍚嶅瓧鏀圭紪鏂規鐨勪笉鍚岋紝榪欐牱鍗充嬌鎺ュ彛涓ょ瀵規帴鍙f湰韜殑瑙i噴涓嶉氾紝鍙瀹冧滑浣跨敤涓鑷寸殑鎴愬憳瀵歸綈鏂瑰紡鍜屽竷灞鏂規銆佷竴鑷寸殑鍑芥暟璋冪敤瑙勮寖銆佷竴鑷磛irtual function瀹炵幇鏂瑰紡錛屾繪槸灝辨槸涓鑷寸殑C++瀵硅薄妯″瀷銆傚茍涓斾繚璇丆OM緇勪歡鍗囩駭鏃朵笉鏀瑰彉鍘熸潵鐨勬帴鍙e拰鏁版嵁綾誨瀷瀹氫箟錛屽垯鎵鏈夋柟娉曠殑榪愯鏃剁粦瀹氶兘涓嶄細瀛樺湪闂錛堟墍鏈夋柟娉曠殑璋冭瘯閮借杞崲涓洪氳繃瀵硅薄鎸囬拡瀵箆ptr鍜寁table鍙婂嚱鏁版寚閽堢殑鎿嶄綔錛岃繖縐嶉棿鎺ユт笉鍐嶉渶瑕佷換浣曟柟娉曞悕鍗沖嚱鏁板悕鐨勫弬涓庯紝鑰屾帴鍙e悕鍜屾柟娉曞悕鍙槸涓轟簡璁╁鎴風鐨勪唬鐮佽兘澶熼『鍒╅氳繃緙栬瘧錛屼絾鏄繛鎺ユ椂灝卞畬鍏ㄤ笉鍦ㄩ渶瑕佷簡銆傦級
浣嗘槸瀵逛簬瀹氫箟浜庢櫘閫氶潤鎬侀摼鎺ュ簱鍜屽姩鎬侀摼鎺ュ簱涓殑鍏ㄥ眬鏁版嵁綾誨瀷銆佸叏灞鍑芥暟銆佸叏灞鍙橀噺鐢氳嚦鍏ㄥ眬甯擱噺錛屽畠浠殑榪炴帴瑙勮寖蹇呴』鍦ㄤ袱绔繚鎸佷竴鑷淬佸惁鍒欏鎴風▼搴忎細鍑虹幇榪炴帴闂銆傝繖鏄洜涓烘櫘閫氱殑灝佽涓篋LL鐨勫嚱鏁板簱鎴栬呯被搴擄紝瀹㈡埛紼嬪簭鍦ㄥ垱寤轟嬌涓鑸兘闇瑕佷笌瀹冧滑鐨勫鍑哄簱榪涜榪炴帴錛岄櫎闈炰嬌鐢╨oadlibrary()鍜実etprocaddress()鍑芥暟瀵規潵鑾峰緱DLL涓嚱鏁扮殑鍦板潃錛岄氱敤鐨勮繛鎺ヨ鑼冭灞濩榪炴帴瑙勮寖錛歟xtern‘C’銆?/span>
鍏蜂綋浣跨敤鏂規硶錛?/span>閲屼粊鏁欒偛宓屽叆寮忓煿璁?/span>鑱屼笟璁插笀璇︽儏璁茶В錛?/span>
Extern’C’void WinMainCRTStartup()錛?/span>
Extern’C’const CLSID CLSID_DataConvert()錛?/span>
Extern’C’struct Student{.......}錛?/span>
Extern’C’student g_student;
濡傛灉鏄涓孌典唬鐮佹寚瀹氳繛鎺ヨ鑼冿細
#ifdef _cplusplus
Extern ‘C’{
#endif
Const int MAX_AGE=200錛?/span>
#pragma pack(push,4)
Typedef struct _person
{
Char *m_Name;
Int m_Age;
}person,*personPtr;
#pragma pack(pop)
Person g_Me;
Int _cdecl memcmp(const void*,const void*,size_t)錛?/span>
Void * _cdecl memcpy(void,const void*,size_t)錛?/span>
Void* _cdecl memset(void*,int,size_t)錛?/span>
#ifdef _cplusplus
}
#endif
1. 鍛戒護鏍煎紡
#patch -p1<[patchfile]
鎴栬?/span>
#patch -R <[patchfile]
涓婇潰涓や釜鏍煎紡浠婚変竴鏉″氨鍙互浜嗐?/span>
2.浣跨敤鏂規硶
#patch -p1<[patchfile]
瑕佹眰琛ヤ竵鏂囦歡瑕佹斁鍒版簮浠g爜鐩綍涓嬶紝鐒跺悗鍦ㄨ繍琛岃繖鏉″懡浠ゃ?/span>
渚嬪錛氱粰xchat2.6.0鎵撹ˉ涓侊紝 琛ヤ竵鏂囦歡鏄痻c260-fetext.diff銆?/span>
棣栧厛閫夊叆 xchat2.6.0鐨勭洰褰曪紝 騫朵笖灝唜c260-fix-fetext.diff鏂囦歡澶嶅埗鍒拌繖涓洰褰曪紝鐒跺悗榪愯錛?/span>
#patch -p1<xc260-fix-fetext.diff
濡傛灉鍑虹幇鎻愮ず淇℃伅錛歱atching file src/text/fe-text/fe-text.c 榪欒鏄庢墦琛ヤ竵鎴愬姛浜嗐?/span>
#patch -R<[pathfile]
榪欎釜鍛戒護榪愯鍚庯紝榪樿鎸囧畾琚ˉ涓佺殑鏂囦歡鐨勮礬寰勫拰鏂囦歡鍚?www.lirenedu.org
l 浣跨敤Kill鍛戒護鏉ユ秷鐏繘紼?/span>
濡傛灉榪愯浜嗘煇涓▼搴忓鑷翠簡姝繪満錛岄偅涔堝氨搴旇鍒囨崲鍒板叾浠栫殑鎺у埗鍙頒笅錛屾寜涓媍trl+alt+fx錛屽叾涓瓁鍙互鏄?·5錛岃繖鍙栧喅浜庣敤鎴風殑try鐨勫灝戙?/span>
鐢╬s鏄劇ず榪欎釜紼嬪簭鐨勮繘紼婭D銆?/span>
榪欓噷浠chat涓轟緥銆?/span>
$ps aux |grep xchat
Wanglin 12063 0.0 1.8 89536 19028 ?S1 apr06 2:40 xchat
鍏朵腑12063灝辨槸瀹冪殑ID銆?/span>
涔熷彲浠ヤ嬌鐢╬grep鏉ユ樉紺篒D錛屽涓嬶細
$pgrep xchar
12063
浣跨敤Kill鏉ユ秷鐏繖涓繘紼?/span>
浣跨敤kil鏉ユ秷鐏繘紼嬶紝濡傛灉娑堢伃涓嶆帀錛岃繕瑕佸姞鍙傛暟-9錛屽畠鍙互寮哄埗緇撴潫榪涚▼銆?/span>
$ kill 12063
$ kill -9 12063
l 浣跨敤pkill鎴栬卥illall鏉ユ秷鐏繘紼?/span>
瀹冧滑鐨勫叡鍚岀偣灝辨槸閮藉彲浠ョ敤紼嬪簭鐨勫悕縐頒綔涓哄弬鏁般?/span>
$ pkill -9 xchat
$ killall xchat
l 浣跨敤鍥懼艦鍖栫殑鏂瑰紡鏉ユ秷鐏繘紼?/span>
$xkill
浼氬嚭鐜頒竴涓猉褰㈢殑鍏夋爣錛屽崟鍑婚渶瑕佹秷鐏殑紿楀彛錛屽氨鍙互娑堢伃榪欎釜紼嬪簭銆?a >www.lirenedu.org
涓存椂鏀瑰彉緗戠粶鍙傛暟
l .Ifconfig:鏌ョ湅鍜岄厤緗甀P鍦板潃銆?/span>
$ifconfig eth0
$sudo ifconfig eth0 192.168.9.23 netmask 255.255.255.0
route:閰嶇疆璺敱鍙傛暟
$sudo route add default gw 192.168.9.1 eth0 #璁劇疆榛樿緗戝叧
浣垮弬鏁扮珛鍗崇敓鏁?/span>
$sudo/etc/init.d/networking restart
淇敼緗戠粶閰嶇疆鏂囦歡
璁劇疆DNS鏈嶅姟鍣ㄣ?/span>
$sudo echo‘nameserver=219.150.32.132>/etc/resolv.conf’
緙栬緫/etc/network/interfaces銆?/span>
$sudo vim /etc/network/interfaces
Auto lo
Iface lo inet loopback
Iface eth0 inet static #璁劇疆eth0,闈欐両P
Address 192.168.8.45
Netmask 255.255.255.0
Gateway 192.168.8.1
Iface eht1inet dhcp #璁劇疆eth1涓篸hcp妯″紡
l 鍙互閫氳繃涓嬮潰鐨勫懡浠よ緗礬鐢便?/span>
Up route add default gw 192.168.8.1 eth1
Up route add –net 192.168.8.0/24 gw 192.168.8.1 eth0
Down route del –net 192.168.8.0/24 gw 192.168.8.1 eth0
鍏朵腑錛屽綋緗戠粶鎺ュ彛up鏃訛紝鎵ц瀹冨悗闈㈢殑鍛戒護錛涘綋緗戠粶鎺ュ彛down鏃訛紝鎵ц瀹冨悗闈㈢殑鍛戒護銆?/span>
浣跨敤鍙傛暟绔嬪嵆鐢熸晥銆?/span>
$sudo /etc/init.d/networking restart 杞細www.lirenedu.org
1. 緋葷粺淇℃伅
l 鏌ョ湅鍐呮牳淇℃伅銆?/span> $uname -a
l 鏌ョ湅鎿嶄綔緋葷粺鐨勭増鏈?/span> $head –n 1/etc/issue
l 鏌ョ湅CPU鐨勪俊鎭?/span> $cat /proc/cpuinfo
l 鏌ョ湅璁$畻鏈哄悕縐般?/span> $hostname
l 鍒楀嚭鎵鏈?/span>PCI璁懼淇℃伅銆?/span> $lspci –tv
l 鍒楀嚭鎵鏈?/span>USB璁懼淇℃伅銆?/span> $lsusb –tv
l 鍒楀嚭緋葷粺鍔犺澆鐨勬ā鍧椾俊鎭?/span> $lsmod
2. 緋葷粺璧勬簮鐨勪嬌鐢ㄤ俊鎭?/span>
l 鏌ョ湅鍐呭瓨鍜屼氦鎹㈠尯鍒嗙殑浣跨敤閲忋?/span> $free –m
l 鏌ョ湅紜洏鍒嗗尯鐨勪嬌鐢ㄦ儏鍐點?/span> $df –h
l 鏌ョ湅鏌愪釜鐩綍鐨勫ぇ灝忋?/span> $du –sh<鐩綍>
l 鏌ョ湅鍐呭瓨鎬婚噺鍜岀┖闂插唴瀛橀噺銆?/span>
$grep memTotal /proc/meminfo
$grep memfree /proc/meminfo
l 鏌ョ湅緋葷粺榪愯鏃墮棿銆佺敤鎴鋒暟鍜岃礋杞姐?/span>$uptime
l 鏌ョ湅緋葷粺璐熻澆銆?/span>$cat /proc/loadavg www.lirenedu.org
緙栬瘧鍣ㄦ棤娉曢鏈熶竴涓▼搴忓湪鎵ц榪囩▼涓細鍦ㄤ綍鏃跺垱寤轟竴浜涗粈涔堝璞★紝鑰屽彧鑳芥牴鎹綋鏃剁殑涓婁笅鏂囪姹傚垱寤猴紝瀵硅薄鐨勫垵濮嬪寲鏈濂借兘澶熼氳繃榪愯鏃舵墽琛屼竴涓嚱鏁版潵瀹屾垚錛岃屼笖鏄湪瀵硅薄鍒涘緩鐨勫悓鏃訛紝榪欎釜鍑芥暟灝辨槸鏋勯犲嚱鏁幫紝鍚屾牱錛屽璞″湪瀹屾垚鍏朵嬌鍛界殑鏃跺欒兘澶熼氳繃涓涓嚱鏁版潵閿姣侊紝榪欏氨鏄瀽鏋勫嚱鏁般?/span>
褰撶粰涓涓璞″垎閰嶅ソ鍘熷鍐呭瓨絀洪棿鐨勬椂鍊欙紝榪欎釜瀵硅薄灝卞簲璇ョ畻鍒涘緩璧鋒潵浜嗐傚彧涓嶈繃瀹冭繕澶勪簬涓縐?#8220;鍘熷鐘舵?#8221;錛屽嵆鏈垵濮嬪寲鐨勶紝涓嶈壇鐨勭姸鎬侊紝濡傛灉鎶婅繖鏍風殑鍐呭瓨鐩存帴鎷挎潵浣跨敤錛岄櫎闈炵涓涓搷浣滄槸璧嬪鹼紝鍚﹀垯鏋佹湁鍙兘鍑洪敊銆備緥濡傦細
Long long1; //灞閮ㄥ彉閲?/span>
Count<
Char*pstr=(char*)malloc(1024);
Cout<
鍥犳錛屽垱寤轟竴涓彉閲忔垨鍔ㄦ佸璞℃椂涓瀹氫笉瑕佸繕璁板垵濮嬪寲銆?nbsp;鍒濆鍖栧氨鏄湪瀵硅薄鍒涘緩鐨勫悓鏃朵嬌鐢ㄥ垵鍊肩洿鎺ュ~鍏呭璞$殑鍐呭瓨鍗曞厓錛屽洜姝わ紝涓嶄細鏈夋暟鎹被鍨嬭漿鎹㈢瓑涓棿榪囩▼錛屼篃灝變笉浼氫駭鐢熶復鏃跺璞★紝鑰岃祴鍊煎垯鏄湪瀵硅薄鍒涘緩濂藉悗浠諱綍鏃跺欓兘鍙互璋冪敤鐨勮屼笖鍙互澶氭璋冪敤鐨勫嚱鏁幫紝鐢變簬瀹冭皟鐢ㄧ殑鏄?#8220;=”榪愮畻絎︼紝鍥犳鍙兘闇瑕佽繘琛岀被鍨嬭漿鎹紝鍗充細浜х敓涓存椂瀵硅薄銆?/span>
C++瀵硅薄鍙互浣跨敤鏋勯犲嚱鏁版潵鍒濆鍖栵紝鏋勯犲嚱鏁版槸浠諱綍瀵硅薄鍒涘緩鏃惰嚜鍔ㄨ皟鐢ㄧ殑絎竴涓垚鍛樺嚱鏁幫紝涔熸槸涓烘瘡涓璞′粎璋冪敤涓嬈$殑鎴愬憳鍑芥暟錛屾墍浠ユ瀯閫犲嚱鏁扮殑浣滅敤灝辨槸錛?/span>褰撳璞$殑鍐呭瓨鍒嗛厤濂藉悗鎶婂畠鍘熷鐘舵佸彉鎴愯壇濂界殑鍙敤鐨勭姸鎬併?/span>
鏈夌殑紼嬪簭鍛樺彲鑳借涓猴細铏界劧鎴戞病鏈夊湪鏋勯犲嚱鏁頒腑鍒濆鍖栨暟鎹垚鍛橈紝浣嗘槸鎴戝湪澹版槑涓涓璞″悗椹笂璋冪敤瀹冪殑set-XXX()鍑芥暟鏉ュ垵濮嬪寲瀹冪殑姣忎竴涓垚鍛橈紝鏁堟灉涔熸槸涓鏍風殑銆?/span>
鏈濂戒負姣忎釜綾繪樉寮忓湴瀹氫箟鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟錛屽嵆浣垮畠浠殏鏃剁┖鐫錛屽挨鍏舵槸褰撶被鍚湁鎸囬拡鎴愬憳鎴栧紩鐢ㄦ垚鍛樼殑鏃跺欍?/span>
鏋勯犲嚱鏁扮殑鍙︿竴閲嶈鐢ㄩ斿氨鏄粰涓浜涘彲鑳藉彲鑳藉瓨鍦ㄧ殑闅愬惈鎴愬憳濡倂ptr鍒涢犱竴涓垵濮嬪寲鐨勬満浼氾紝鍚﹀垯铏氭嫙鏈哄皢涓嶈兘淇濊瘉瀹炵幇錛屾瘡褰撴鏃訛紝濡傛灉紼嬪簭鍛樻病鏈変負涓涓鎬佺被鏄懼紡鍦板畾涔夐粯璁ゆ瀯閫犲嚱鏁般佹嫹璐濇瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁版垨鎷瘋礉璧嬪煎嚱鏁幫紝閭d箞緙栬瘧鍣ㄤ細鑷姩寰楃敓鎴愮浉搴旂殑鍑芥暟錛屽畠浠兘鏄痯ublic inline鐨勶紝騫跺湪鍏朵腑鎻掑叆姝g‘鍒濆鍖栨垨淇敼vptr鏁版嵁鎴愬憳鍊肩殑浠g爜錛岃屼笖紜繚鍩虹被瀵硅薄鍜屾淳鐢熺被瀵硅薄鏋勯犳椂鍙婂湪瀹冧滑涔嬮棿鎷瘋礉鏃秜ptr鑳藉鎸囧悜鎴栭噸鏂版寚鍚戞伆褰撶殑vtable錛岃繖鏍風殑4涓嚱鏁板垎甯冨彨闈炲鉤鍑¢粯璁ゆ瀯閫犲嚱鏁般侀潪騫沖嚒鎷瘋礉鏋勯犲嚱鏁般侀潪騫沖嚒鏋愭瀯鍑芥暟鍜岄潪騫沖嚒鎷瘋礉璧嬪煎嚱鏁般?a >www.lirenedu.org
1) _cedcl:榪欐槸C++/C鍑芥暟鐨勯粯璁よ皟鐢ㄨ鑼?/span>錛屽弬鏁頒粠鍙沖悜宸︿紶閫掑帇鍏ュ爢鏍堬紝鐢辮皟鐢ㄥ嚱鏁板鏉傚爢鏍堢殑娓呴錛屽洜姝よ繖縐嶆柟寮忓埄浜庝紶閫掍釜鏁板彲鍙樼殑鍙傛暟緇欒璋冪敤鍑芥暟銆傚printf()灝辨槸榪欐牱鐨勫嚱鏁般?/span>
2) _stdcall:榪欐槸Win API鍑芥暟浣跨敤鐨勮皟鐢ㄨ鑼冿紝鍙傛暟浠庡彸鍚戝乏渚濇浼犻掑茍鍘嬪叆鍫嗘爤錛岀敱琚皟鐢ㄥ嚱鏁板鏉傚爢鏍堢殑娓呴銆傝瑙勮寖鐢熸垚鐨勫嚱鏁頒唬鐮佹瘮_cdecl鏇村皬錛屼絾褰撳嚱鏁版湁鍙彉涓暟鐨勫弬鏁版椂浼氳漿涓篲cdecl瑙勮寖銆傚湪Windows涓紝瀹廤INAPI銆丆ALLBACK閮藉畾涔変負_stdcall銆?/span>
3) _thiscall:鏄疌++闈為潤鎬佹垚鍛樺嚱鏁扮殑榛樿璋冪敤瑙勮寖錛屼笉鑳戒嬌鐢ㄤ釜鏁板彲鍙樼殑鍙傛暟銆傚綋璋冪敤闈為潤鎬佹垚鍛樺嚱鏁扮殑鏃跺欙紝this鎸囬拡鐩存帴淇濆瓨鍦‥CX瀵勫瓨鍣ㄤ腑鑰屽帇鍏ュ嚱鏁板爢鏍堬紝鍏朵粬鏂歸潰涓巁stdcall鐩稿悓銆?/span>
4) _fastcall:璇ヨ鑼冩墍淇グ鐨勫嚱鏁扮殑瀹炲弬灝嗚鐩存帴浼犻掑埌CPU瀵勫瓨鍣ㄤ腑鑰屼笉鏄唴瀛樺爢鏍堜腑錛屽爢鏍堟竻閫鐢辮璋冪敤鍑芥暟璐熻矗錛岃瑙勮寖涓嶈兘鐢ㄤ簬鎴愬憳鍑芥暟銆?/span>
鍑芥暟蹇呴』鍒跺畾鐨勪竴涓皟鐢ㄨ鑼冿紝鐗瑰埆鏄湪妯″潡涔嬮棿鐨勯昏緫鎺ュ彛涓紝姣忎釜鍑芥暟鍘熷瀷鐨勮皟鐢ㄨ鑼冨繀欏諱笌鍏跺疄鐨勮皟鐢ㄨ鑼冧繚鎸佷竴鑷達紝鍚﹀垯浼氬嚭鐜扮紪璇戣繛鎺ラ敊璇傚鏋滀綘璋冪敤浜嗗湪鏌愪釜DLL涓疄鐜扮殑COM瀵硅薄鐨勬柟娉曪紝鑰岃繖浜涙柟娉曞湪鍒涘緩鏃跺嵈娌℃樉寮忓湴鍒跺畾璋冪敤瑙勮寖錛岄偅涔堝畠浠細浣跨敤鐜榛樿鐨勮皟鐢ㄨ鑼冿紝铏界劧浣犵殑紼嬪簭鍙互閫氳繃緙栬瘧鍜岃繛鎺ワ紝浣嗘槸鍦ㄨ繍琛屾椂灝卞彲鑳藉鑷寸▼搴忓穿婧冦?/span>
鎵浠ワ紝鍑℃槸鎺ュ彛鍑芥暟閮藉繀欏繪樉寮忓湴鍒跺畾鍏惰皟鐢ㄨ鑼冿紝闄ら潪鎺ュ彛鍑芥暟鏄被鐨勯潪闈欐佹垚鍛樺嚱鏁幫紝濡傛灉涓嶆樉寮忓埗瀹氳皟鐢ㄨ鑼冿紝綾葷殑闈欐佹垚鍛樺嚱鏁板拰鍏ㄥ眬鍑芥暟灝嗛噰鐢–++/C榛樿鐨勫嚱鏁拌皟鐢ㄨ鑼冩垨鑰呯敱宸ョ▼璁劇疆鎸囧畾鐨勮皟鐢ㄨ鑼冿紝鍥犳鏈濂戒篃涓洪潤鎬佹垚鍛樺嚱鏁版樉寮忓湴鎸囧畾璋冪敤瑙勮寖銆?/span>
娉ㄦ剰錛氱被鐨勯潤鎬佹垚鍛樺嚱鏁扮殑榛樿璋冪敤瑙勮寖涓嶆槸thiscall錛岀被鐨勫弸鍏冨嚱鏁扮殑璋冪敤涔熶笉鏄痶hiscall錛屽畠浠兘鏄敱鍑芥暟鏈韓鎸囧畾鎴栬呯敱宸ョ▼璁懼畾鐨勩侰OM鎺ュ彛鐨勬柟娉曢兘鎸囧畾_stdcall璋冪敤瑙勮寖錛岃屾垜浠嚜宸卞紑鍙慍OM瀵硅薄鍙婃帴鍙f椂涔熷彲浠ユ寚瀹氬叾浠栫殑璋冪敤瑙勮寖銆?/span>
涓瀹氳鐭ラ亾C鍩虹鐨勫熀鏈蹇碉細
璁よ瘑鍑芥暟鍫嗘爤錛?/span>http://www.lirenedu.org/index.php?ack=xinwen&id=1026
鍩轟簬C璇█鍩虹姒傚康錛?/span>http://www.lirenedu.org/index.php?ack=xinwen&id=1024
鎿嶄綔緋葷粺鍑犱釜鍩烘湰瑕佺偣錛?/span>http://www.lirenedu.org/index.php?ack=xinwen&id=1029
浜屻?/span>鍙嫹璐濇瀯閫犲拰鎷瘋礉璧嬪肩殑錛屾棦鍏鋒湁public鐨?/span>copy constructor鍜?/span>copy assignment operator錛屼笉璁烘槸緙栬瘧鍣ㄩ粯璁よ繕鏄?/span>operator錛屽鏋滄病鏈夋樉寮忓畾涔夊畠鐨勮瘽錛岃繖涓潯浠跺彲褰掔粨涓猴細鍏冪礌蹇呴』鏄嫹璐濈殑錛屼絾瀹為檯涓婃嫹璐濊祴鍊肩殑瑕佹眰涔熶笉鏄己鍒剁殑錛屽師鍥犲拰default constructor綾諱技銆?/span>
涓夈?/span>鍏鋒湁public鐨?/span>destructor錛屼笉璁烘槸緙栬瘧鍣ㄩ粯璁ょ殑榪樻槸鐢ㄦ埛鏄懼紡瀹氫箟鐨勩?/span>
鍥涖?/span>瀵逛簬鍏寵仈寮忓鍣紝瑕佹眰鍏跺厓绱犲繀欏繪槸鍙瘮杈冪殑銆?/span>
Auto_ptr婊¤凍涓婅堪鏉′歡鍚楋紵鑷沖皯婊¤凍鍓嶄笁鏉★紝鍥犳鑷沖皯鍙互浣滀負搴忓垪寮忓鍣ㄧ殑鍏冪礌錛屽鏋滀負auto-ptr瀹氫箟浜嗘瘮杈冭繍綆楃鐨勮瘽錛屽簲璇ヨ繕鍙互鎶婂畠浣滀負鍏寵仈寮忓鍣ㄧ殑鍏冪礌銆?/span>
浣嗘槸auto_ptr鐨勭壒鐐規槸鎺ョ鍜岃漿縐繪嫢鏈夋潈錛岃屼笉鏄儚鍘熷鎸囬拡閭f牱鍙互鍏變韓瀹炲煎璞★紝鍗?/span>auto_ptr鍦ㄥ垵濮嬪寲鏃舵帴綆″疄鍊煎璞″拰鎷ユ湁鏉冿紝鑰屽湪鎷瘋礉鏃朵細浜ゅ嚭瀹炲煎璞″強鍏舵嫢鏈夋潈銆?/span>
鍥犳錛?/span>auto_ptr瀵硅薄鍜屽畠鐨勬嫹璐濅笉浼氬叡浜疄鍊煎畠鐨勬嫹璐濆茍涓嶇浉鍚岋紝鐒惰屾牴鎹?/span>STL瀹瑰櫒鍊艱涔夌殑瑕佹眰錛屽彲鎷瘋礉鏋勯犳剰鍛崇潃涓涓潃鎶婁竴涓璞¤祴鍊肩粰鍙︿竴涓悓綾誨瀷瀵硅薄灝嗕駭鐢熶袱涓浉鍚岀殑瀵硅薄錛屾樉鐒訛紝auto_ptr涓嶈兘婊¤凍榪欎竴瑕佹眰錛屼笌涓婇潰緇撹鐭涚浘錛侀偅涔堥棶棰樺嚭鍦ㄥ摢閲屽憿錛?/span>
鍦ㄦ彮寮auto_ptr鐨勪箣鍓嶉渶瑕佷簡瑙?/span>copy constructor鍜?/span>copy assignment operator錛岀殑鍑犵鍚堟硶褰㈠紡錛屼換浣曚竴涓被閮藉厑璁鎬袱縐嶅艦寮忕殑copy constructor錛?/span>
C(const C©)錛?/span>
C錛?/span>C©錛夛紱
鍚屾牱錛?/span>copy assignment operator鍏佽綾諱技鐨勪袱縐嶅艦寮忋?/span>
C& operator=錛?/span>const C ©錛夛紱
C& operator=錛?/span>C & copy錛夛紱
瀹為檯涓婏紝鐢變簬copy assignment operator涓烘櫘閫氱殑榪愮畻絎﹂噸杞芥垚鍛樺嚱鏁幫紝鍥犳榪樺彲浠ュ畾涔変笅鍒楀艦寮忚祴鍊煎嚱鏁幫紱
C&operator=錛?/span>C copy錛夛紱
濡傛灉瑕侀槻姝㈢敤鎴鋒妸涓浜涗笉鍚堥傜殑瀵硅薄鏀懼叆瀹瑰櫒涓紝灝辮姹傚璞$殑璁捐鍜屾槸瀹炵幇鑰呬嬌鐢ㄤ竴浜涜璦鏀寔浣嗕笉甯哥敤鐨勭壒寰侊紝涔熷氨鏄錛岃鑳藉鍦ㄧ紪璇戦樁孌靛氨闃繪榪欑鍏鋒湁娼滃湪鍗遍櫓鎬х殑琛屼負錛屽父鐢ㄧ殑鏂規硶灝辨槸榪嬌鍏惰繚鍙?/span>C++闈欐佺被鍨嬪畨鍏ㄨ鍒欍?/span>
姣斿鎴戜滑甯哥敤鐨勫嚱鏁?/span>fopen(),褰撴墦寮鏂囦歡澶辮觸鏄繑鍥?/span>NULL錛屾寜鐓т紶緇熺殑閿欒澶勭悊鏂規硶錛屽湪璋冪敤Fopen()鍚庣珛鍗蟲鏌ュ叾榪斿洖鍊鹼紝濡傛灉涓?/span>NULL灝辮繘琛岄敊璇鐞嗭紝濡傛灉灝嗚繑鍥?/span>NULL鏀逛負鎶涘嚭寮傚父OpenFailed錛岄偅涔堟垜浠氨涓嶇敤鍦ㄨ皟鐢?/span>fopen()鍚庨┈涓婃鏌ヨ繑鍥炲鹼紝鑰屾槸鍦ㄨ皟鐢ㄥ嚱鏁板唴閮ㄦ垨鑰呮洿楂樺眰鐨勮皟鐢ㄨ呴偅閲岃緗紓甯稿鐞嗗櫒鏉ユ崟鑾瘋繖涓紓甯革紝C++淇濊瘉錛氬鏋滀竴涓紓甯稿湪鎶涘嚭鐐規病鏈夊緱鍒板鐞嗭紝閭d箞瀹冨皢涓鐩存姏鍚戜笂灞傝皟鐢ㄨ咃紝鐩磋嚦main()鍑芥暟錛岀洿鍒版壘鍒頒竴涓被鍨嬪尮閰嶇殑寮傚父澶勭悊鍣紝鍚﹀垯璋冪敤terminate()緇撴潫紼嬪簭銆?/span>
鍙互鐪嬪嚭錛?/span>寮傚父澶勭悊鏈哄埗瀹為檯涓婃槸涓縐嶈繍琛屾椂閫氱煡鏈哄埗銆?/span>
Class DevidedByZero{}錛?/span>
Double Devide錛?/span>double a錛?/span>double b錛?/span>
{
If錛?/span>abs(b)
{
Throw DevidedByZero()錛?/span>//鎻愬墠媯嫻嬪紓甯稿彂鐢熸潯浠跺茍鎶涘嚭鑷畾涔夊紓甯?/span>
Return a/b; //榪欐墠鏄彲鑳界湡姝e彂鍑洪敊璇殑鍦版柟
}
Void test()
{
Double x=100,y=20.5
Try{
Cout<
}
Catch錛?/span>DevidedByZero&錛?/span>{
Cerr<< “ Devided by zero!”<
}
}
1. 鍒ゆ柇鎸囬拡鏄惁涓?/span>NULL錛屽鏋滄槸鍒欑珛鍒葷敤return璇彞緇堟鏈嚱鏁般備緥濡傦細
Void Func(void)
{
A *a=new(nothrow) A錛?/span>
If錛?/span>a==NULL錛?/span>return錛?/span>
……
}
2. 鍒ゆ柇鎸囬拡鏄惁涓?/span>NULL錛屽鏋滄槸鍒欑珛鍒葷敤exit(1)緇堟鏁翠釜紼嬪簭鐨勮繍琛岋紝渚嬪錛?/span>
Void Func錛?/span>void錛?/span>
{
A *a=new(nothrow) A錛?/span>
If錛?/span>a==NULL錛?/span>exit(1)錛?/span>
}
3. 涓?/span>new鍜?/span>malloc()棰勮寮傚父澶勭悊鍑芥暟錛屼緥濡傦紝Visual C++鍙互鐢?/span>_set_new_hander鍑芥暟涓?/span>new璁劇疆鐢ㄦ埛鑷畾涔夊紓甯稿鐞嗗嚱鏁幫紝涔熷彲浠ヨmalloc()浜敤涓?/span>new鐩稿悓鐨勫紓甯稿鐞嗗嚱鏁般?/span>
4. 鎹曡幏new鎶涘嚭鐨勫紓甯革紝騫跺皾璇曚粠涓仮澶嶃?/span>
涓婅堪(1)鍜岋紙2錛変袱縐嶆柟寮忎嬌鐢ㄦ渶鏅氥傚鏋滀竴涓嚱鏁板唴鏈夊澶勯渶瑕佸姩鎬佺敵璇峰唴瀛橈紝閭d箞鏂瑰紡(1)灝辨樉寰楀姏涓嶄粠蹇冿紝搴旇鐢ㄦ柟寮忥紙2錛夋潵澶勭悊銆備笉榪囧湪C++涓垜浠彁鍊′嬌鐢ㄦ柟寮?/span>(4)銆?/span>
鏈変竴涓緢閲嶈鐨勭幇璞¤鍛婅瘔澶у錛?/span>
瀵逛簬32浣嶄互涓婄殑搴旂敤紼嬪簭鑰岃█錛屼竴鑸儏鍐典笅浣跨敤malloc()鍜?/span>new鍑犱箮涓嶅彲鑳藉鑷?#8216;鍐呭瓨鑰楀敖’銆傛垜鍦?/span>windows98涓嬬敤Visual C++緙栧啓浜嗘祴璇曠▼搴忥細
榪欎釜紼嬪簭鏃犱紤鍦拌繍琛屼笅鍘伙紝鏍規湰涓嶄細緇堟錛屽洜涓?/span>32浣嶆搷浣滅郴緇熸敮鎸?#8216;铏氬瓨’錛屽唴瀛樼敤瀹屼簡錛岃嚜鍔ㄧ敤紜歡絀洪棿欏舵浛銆?/span>
Void main錛堬級
{
Int *p=NULL錛?/span>
Unsigned int len=1024*1024錛?/span>
While錛?/span>1錛?/span>{
P=new(nothrow) int[len]錛?/span> //鎴栬?/span> malloc(sizeof(int)*len)錛?/span>
If(!p){
Len>>=1; //len緙╁皬涓鍗?/span>
If錛?/span>len==0錛?/span>
Exit(1)錛?/span>
Continue錛?/span>
}
Cout<<“Allocated錛?#8221;<<“錛?/span>len*sizeof(int)錛?#8221;<<“bytes.”<<endl錛?/span>
}
}
鍙互寰楀嚭涓涓粨璁猴細
瀵逛簬32浣嶄互涓婂簲鐢ㄧ▼搴忥紝鍐呭瓨鑰楀敖閿欒澶勭悊紼嬪簭鍑犱箮姣棤鐢ㄥ錛屼絾鏄繀欏誨己璋冧笉鍔犻敊璇鐞嗗皢瀵艱嚧紼嬪簭鐨勮川閲忓緢宸紝鍗冧竾涓嶅彲鍥犲皬澶卞ぇ銆?/span>