delete與析構函數
gcc下調用兩次析構函數的問題
#include <iostream>
#include <stdlib.h>
using namespace std;
class A
{
public:
A() { cout << "A\n"; }
A(const A& b) { cout << "copy A\n"; }
~A() { cout << "~A\n"; }
};
int main()
{
// A b;
// delete &b;//gcc 調用兩次析構 VS報錯
return 0;
}
原代碼中的A是建立在棧中
由系統自動釋放內存
而delete是爲動態分配內存而設計的,析構的是堆內存
所以gcc會有兩次析構(沒有報錯也是很奇怪了)
在VS下由於delete沒有堆內存所以VS下運行出錯