å¨ç±»çæåå½æ°ä¸è½ä¸è½è°ç¨delete thisï¼çæ¡æ¯è¯å®çï¼è½è°ç¨ï¼èä¸å¾å¤èä¸ç¹çåºé½æè¿ç§ä»£ç ãå设è¿ä¸ªæåå½æ°ååå«releaseï¼èdelete thiså°±å¨è¿ä¸ªreleaseæ¹æ³ä¸è¢«è°ç¨ï¼é£ä¹è¿ä¸ªå¯¹è±¡å¨è°ç¨releaseæ¹æ³åï¼è¿è½è¿è¡å
¶ä»æä½ï¼å¦è°ç¨è¯¥å¯¹è±¡çå
¶ä»æ¹æ³ä¹ï¼çæ¡ä»ç¶æ¯è¯å® çï¼è°ç¨releaseä¹åè¿è½è°ç¨å
¶ä»çæ¹æ³ï¼ä½æ¯æ个åæï¼è¢«è°ç¨çæ¹æ³ä¸æ¶åè¿ä¸ªå¯¹è±¡çæ°æ®æåå
èå½æ°ã说å°è¿éï¼ç¸ä¿¡å¤§å®¶é½è½æç½ä¸ºä»ä¹ä¼è¿æ · äºã
æ ¹æ¬åå å¨äºdeleteæä½ç¬¦çåè½å类对象çå
å模åãå½ä¸ä¸ªç±»å¯¹è±¡å£°ææ¶ï¼ç³»ç»ä¼ä¸ºå
¶åé
å
å空é´ãå¨ç±»å¯¹è±¡çå
å空é´ä¸ï¼åªææ°æ®æååèå½æ°è¡¨æéï¼å¹¶ä¸å
å«ä»£ç å
容ï¼ç±»çæåå½æ°åç¬æ¾å¨ä»£ç 段ä¸ãå¨è°ç¨æåå½æ°æ¶ï¼éå«ä¼ éä¸ä¸ªthisæéï¼è®©æåå½æ°ç¥éå½åæ¯åªä¸ªå¯¹è±¡å¨è°ç¨å®ãå½ è°ç¨delete thisæ¶ï¼ç±»å¯¹è±¡çå
å空é´è¢«éæ¾ãå¨delete thisä¹åè¿è¡çå
¶ä»ä»»ä½å½æ°è°ç¨ï¼åªè¦ä¸æ¶åå°thisæéçå
容ï¼é½è½å¤æ£å¸¸è¿è¡ãä¸æ¦æ¶åå°thisæéï¼å¦æä½æ°æ®æåï¼è°ç¨èå½æ°çï¼å°±ä¼åºç°ä¸å¯é¢æçé®é¢ã
为ä»ä¹æ¯ä¸å¯é¢æçé®é¢ï¼delete thisä¹åä¸æ¯éæ¾äºç±»å¯¹è±¡çå
å空é´äºä¹ï¼é£ä¹è¿æ®µå
ååºè¯¥å·²ç»è¿ç»ç³»ç»ï¼ä¸åå±äºè¿ä¸ªè¿ç¨ãç
§è¿ä¸ªé»è¾æ¥çï¼åºè¯¥åçæéé误ï¼æ 访é®æéä¹ç±»ç令系ç»å´©æºçé®é¢æ对åï¼è¿ä¸ªé®é¢çµæ¶å°æä½ç³»ç»çå
å管ççç¥ãdelete thiséæ¾äºç±»å¯¹è±¡çå
å空é´ï¼ä½æ¯å
å空é´å´å¹¶ä¸æ¯é©¬ä¸è¢«åæ¶å°ç³»ç»ä¸ï¼å¯è½æ¯ç¼å²æè
å
¶ä»ä»ä¹åå ï¼å¯¼è´è¿æ®µå
å空é´ææ¶å¹¶æ²¡æ被系ç»æ¶åãæ¤æ¶è¿æ®µå
åæ¯å¯ä»¥è®¿é®çï¼ä½ å¯ä»¥å ä¸100ï¼å ä¸200ï¼ä½æ¯å
¶ä¸çå¼å´æ¯ä¸ç¡®å®çãå½ä½ è·åæ°æ®æåï¼å¯è½å¾å°çæ¯ä¸ä¸²å¾é¿çæªåå§åç
éæºæ°ï¼è®¿é®èå½æ°è¡¨ï¼æéæ æçå¯è½æ§é常é«ï¼é æç³»ç»å´©æºã
大è´æç½å¨æåå½æ°ä¸è°ç¨delete thisä¼åçä»ä¹ä¹åï¼åæ¥ççå¦ä¸ä¸ªé®é¢ï¼å¦æå¨ç±»ç
ææå½æ°ä¸è°ç¨delete thisï¼ä¼åçä»ä¹ï¼å®éªåè¯æ们ï¼ä¼å¯¼è´å æ 溢åºãåå å¾ç®åï¼deleteçæ¬è´¨æ¯â为å°è¢«éæ¾çå
åè°ç¨ä¸ä¸ªæå¤ä¸ªææå½æ°ï¼ç¶åï¼éæ¾å
åâ (æ¥èªeffective c++)ãæ¾ç¶ï¼delete thisä¼å»è°ç¨æ¬å¯¹è±¡çææå½æ°ï¼èææå½æ°ä¸åè°ç¨delete thisï¼å½¢ææ ééå½ï¼é æå æ 溢åºï¼ç³»ç»å´©æºã
--------------------ææ¯åçé¢--------------------
ä¸é¢æ¯æ大ççåæï¼èå¨å®é
çè¿è¡è¿ç¨ä¸ä½¿ç¨delele thisç¡®å®ä¼ç´æ¥åºç°é误ãè¿æ¯å 为ï¼å¨æåå½æ°ä¸è°ç¨delete thisï¼é¦å
ä¼è°ç¨ç±»çææå½æ°ï¼thisæéå·²å é¤ï¼ä¼åºç°æéé误ã
ä¸é¢æ¯å¨XCodeä¸ä½¿ç¨delete thisåºç°çé误ï¼
malloc: *** error for object 0xbffffa18: pointer being freed was not allocated
//注æ0xbffffa18å³ä¸ºthisçå°å
*** set a breakpoint in malloc_error_break to debug
èå¨VS2010ä¸ä½¿ç¨delete thisæ¯ç´æ¥å¯¼è´ Debug Assertion Failedï¼
å
·ä½çæè¿°æ¯ï¼invalid null pointer
æ»ç»ï¼å¨æåå½æ°ä¸è°ç¨delete thisï¼ä¼å¯¼è´æéé误ï¼èå¨ææå½æ°ä¸è°ç¨delete thisï¼åºå¯¼è´æ»å¾ªç¯ï¼é æå æ 溢åºã
PSï¼thisæ¯ç±»ä¸æåå½æ°å
·æçä¸ä¸ªéå çéå«å½¢åï¼å³æå该类对象çä¸ä¸ªæéï¼å®ä¸è°ç¨æåå½æ°ç对象ç»å®å¨ä¸èµ·ãåæ¶1.å¨æ®éçéconstæåå½æ°ä¸ï¼thisçç±»åæ¯ä¸ä¸ªæå类类åçconstæéï¼å¯ä»¥æ¹åthisæåçå¼ï¼ä½æ¯ä¸è½æ¹åthisæä¿åçå°åï¼2.å¨constæåå½æ°ä¸ï¼thisçç±»åæ¯ä¸ä¸ªæåconst类类å对象çconstæéï¼æ¢ä¸è½æ¹åthisææåç对象ï¼ä¹ä¸è½æ¹åthisæä¿åçå°åã
注æï¼
æåå½æ°ä¸ä¸è½å®ä¹thiså½¢åï¼èæ¯ç±
ç¼è¯å¨éå«å°å®ä¹ï¼ä½æ¯å¯ä»¥å¨æåå½æ°ä¸æ¾ç¤ºä½¿ç¨thiså½¢åï¼ä¸è¿ä¹ä¸æ¯å¿
é¡»è¿ä¹åãå¦æ对类æåçå¼ç¨æ²¡æéå®ï¼ç¼è¯å¨ä¼å°è¿ç§å¼ç¨å¤çæéè¿thisæéçå¼ç¨ã
æä¸ç§æ
åµä¸å¿
é¡»æ¾å¼ä½¿ç¨thisï¼å½æ们éè¦å°ä¸ä¸ªå¯¹è±¡ä½ä¸ºæ´ä½å¼ç¨èä¸æ¯å¼ç¨å¯¹è±¡çä¸ä¸ªæåæ¶ã
ä»constæåå½æ°è¿åï¼thisï¼ä¸è½ä»constæåå½æ°è¿åæå类对象çæ®éå¼ç¨ãconstæåå½æ°åªè½è¿åï¼thisä½ä¸ºä¸ä¸ªconstå¼ç¨ã