delete操作在 gcc 與 VS 下的差別

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下運行出錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章