亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求問運算符和函數有什么區別,C++里面不是用New開辟的空間可以用free撤銷嗎?

求問運算符和函數有什么區別,C++里面不是用New開辟的空間可以用free撤銷嗎?

C++
MMMHUHU 2021-08-18 18:15:24
運算符和函數有什么區別,C++里面 不是用New開辟的空間可以用free撤銷嗎 就是可不可以直接用free撤銷任意變量空間
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2021-08-23
?
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 不執行,內存泄漏,沒疑問吧

至于能不能這樣混用,具體的編譯器實現可能還有限制,不過我給出的例子應該可以解開你的疑問了:)

 


查看完整回答
反對 回復 2021-08-23
  • 2 回答
  • 0 關注
  • 221 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號