在析构函数中delete this指针问题
生活随笔
收集整理的這篇文章主要介紹了
在析构函数中delete this指针问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思考:在析構函數中delete this指針,運行下面代碼會產生什么樣的結果呢?
#include?<iostream>??using?namespace?std;????class?A{??public:??A(){??cout<<"A()"<<endl;??}??~A(){??cout<<"~A()"<<endl;??delete?this;??}??};????int?main()??{??A?a;??return?0;??}
解析:delete p?是一個兩步的過程:調用析構函數,然后釋放內存(類本身占的內存)。
?
析構函數中調用delete this:上面這段程序的delete this會先調用~A()函數,然后再釋放空間,這樣每次調用delete都會調用~A(),而~A()又要調用delete,他們相互調用,就會形成死循環,造成堆棧溢出。
在成員函數中調用delete this:首先會調用類的析構函數,this指針已刪除,會出現指針錯誤。
?
總結:
在成員函數中調用delete this,會導致指針錯誤,而在析構函數中調用delete this,出導致死循環,造成堆棧溢出。
?
總結
以上是生活随笔為你收集整理的在析构函数中delete this指针问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++11 之模板定义别名(using)
- 下一篇: enable_shared_from_t