我寫了這個分析類及其對內存釋放效應的析構函數的行爲,但結果似乎是有點令人驚訝的對我說:默認分解器V.S.一個簡單的定義析構函數
class test {
public:
test() {}
~test() {} //<-----Run the program once with and once without this line.
};
int main()
{
test x;
test *a(&x);
cout << "a before memory allocation: " << a << endl;
a = new test;
cout << "a after memory allocation and before delete: " << a << endl;
delete a;
cout << "a after delete: " << a << endl;
return 0;
}
在默認析構函數結果是: 但用我自己的析構函數是: 第二個結果是不是錯誤?由於地方我讀到:
的釋放函數應解除分配由指針,渲染無效指解除了分配的存儲的任何部分,所有的指針引用的存儲。
也許我沒有正確地遵循它(特別是由於使用了困難的英文單詞!)。請你向我解釋爲什麼會發生這種情況? 我的簡單定義的析構函數和C++的默認析構函數之間有什麼區別? 感謝您的幫助提前。
指針保持不變的事實與存儲解除分配的事實並不矛盾。這是可以重新使用的內存,使用剛剛刪除的指針訪問此內存將是您自己的錯。 – Gerriet
@Gerriet你會舉一個例子嗎?謝謝。 –
我無法使用默認析構函數重現指針修改:http://ideone.com/vg3TYD – UnholySheep