c++ 對象自殺

來源:互聯網
上載者:User

     第一次見delete this的時候,沒覺得這是一項會有什麼特殊作用的技術,因此也就沒有特別關注。

     昨日在sourcemaking.com上看state模式之c++實現的時候,看到它在狀態轉換的時候使用了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--以保證第三方能夠將分配的記憶體回收;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.