delete this--對象請求自殺

 


C++ FAQ》裏提到所謂“小心”至少包括以下幾個方面:

  1. this對象是必須是用 new操作符分配的(而不是用new[],也不是用placement new,也不是局部對象,也不是global對象);

  2. delete this後,不能訪問該對象任何的成員變量及虛函數(delete this回收的是數據,這包括對象的數據成員以及vtable,不包括函數代碼);

  3. delete this後,不能再訪問this指針。換句話說,你不能去檢查它、將它和其他指針比較、和 NULL比較、打印它、轉換它,以及其它的任何事情;


     個人認爲保證以上禁忌列表基本手段可以包括:

  1. 析構函數私有化(如果有子類,則protected化,保證子類能夠正確繼承)--以保證對象必須使用new在堆上分配內存;

  2. 提供(可以在僅僅在基類中)Destroy(void)函數,裏面僅有一句delete this--以保證第三方能夠將分配的內存回收;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章