#include<stdio.h>
class a
{
public:
~a()
{
/*解構式,如果沒有自定義,則系統自動生成一個解構式*/
printf("destructing!\n");
delete this;
}
};
int main()
{
a b;
}
uj5u.com熱心網友回復:
你為啥要在析構里面呼叫delete this????uj5u.com熱心網友回復:
你這樣玩會一直遞回,直到程式崩潰為止。uj5u.com熱心網友回復:
解構式不是為了完全釋放一個生命期結束的物件的記憶體嗎?假如我使用new生成一個物件,那么我希望它在程式呼叫完成時釋放這個物件的記憶體(堆的記憶體不會自動釋放),所以我用delete。
uj5u.com熱心網友回復:
delete this是多余的代碼呼叫delete this就再次進入析構, 析構里面還繼續delete this 死回圈就這樣產生了
new 是要 delete, 代碼中無new,何來的delete呢
主函式A a; 是把a分配到堆疊里面, 堆疊當中的會自動釋放,無需單獨寫new
即便 A * pA = new A; 那么也是delete pA; 而不是在解構式里面去delete this
解構式要delete的是A的構造或者其他方法內部new出來的記憶體, 你的這個類里面根本就沒有, 因此也不用delete什么
uj5u.com熱心網友回復:
最好不要碎片化學習,能系統的學習一下,否則就是盲人摸象uj5u.com熱心網友回復:
說明你沒有理解new delete用法,書上肯定說了要配對使用,你都沒有new,為何delete.uj5u.com熱心網友回復:
哦哦,我明白了





uj5u.com熱心網友回復:
好的好的,明白了,謝謝
uj5u.com熱心網友回復:
非要配對使用嗎?可是為啥呢
uj5u.com熱心網友回復:
一段代碼想要得到執行,必須要有一條執行緒來執行。你自己想一想,從你的main函式入口開始,你的建構式和解構式,是哪一條執行緒在什么時候去執行的?
uj5u.com熱心網友回復:
C++的邏輯是你自己分配的記憶體就應該你自己洗掉,GO和JAVA的邏輯是,你分配的記憶體,如果沒有任何物件指向它,解釋器會在某個時間自己釋放,不用你手動。用啥語言就要遵守他的規范.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82066.html
標籤:C++ 語言
上一篇:小白一枚,跪求大神指點,每次運行267至278行時總會報錯退出。提示expression:transposed pointer range
