運算符和函數有什么區別,C++里面 不是用New開辟的空間可以用free撤銷嗎 就是可不可以直接用free撤銷任意變量空間
2 回答

拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
運算符是實現某種功能的在C++里面一般是通過函數來實現運算符重載功能后面一個問題用new開辟的空間當然要用delete釋放但是一般的變量空間C++會有自己的申請釋放機制, 不需要你人工釋放樓上說的不錯new和delete對應, 這就是C++的申請和釋放內存的辦法而malloc和free是C的方法

DIEA
TA貢獻1820條經驗 獲得超2個贊
new delete這是c++的動態內存管理方式
new的同時會調用對象的構造函數
delete的同時會調用對象的析構函數
這就是和malloc, free的區別
比如你
struct foo {
int* p;
foo() { p = new int[11111]; cout << "a"; }
~foo() { delete [] p; }
};
你
foo* x = (foo*)malloc(sizeof(foo)); // 不會調用構造函數,p不會被初始化,不會輸出a
delete x; // 調用析構函數,執行delete [] p 是什么結果自己試下就知道了吧
或者
foo* x = new foo; // 調用構造函數,輸出a,初始化p為一個包含11111個int的數組
free(x); // 不會調用析構,delete [] p 不執行,內存泄漏,沒疑問吧
至于能不能這樣混用,具體的編譯器實現可能還有限制,不過我給出的例子應該可以解開你的疑問了:)
- 2 回答
- 0 關注
- 221 瀏覽
添加回答
舉報
0/150
提交
取消