Re: [問題] delete / new , free / malloc

看板C_and_CPP作者 (我要加入劍道社!)時間14年前 (2012/01/11 18:25), 編輯推噓3(306)
留言9則, 5人參與, 最新討論串3/7 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 但聽說 能用new / delete 就盡量用 不要相信「聽說」 你要先理解為什麼要選擇 new/delete : 所以 : 我想使用new 這operator來做 : 但有個疑問 : ulOutBufLen 這個值 有可能 "大於" sizeof(IP_ADAPTER_INFO). : 假如我用 : pAdapterInfo = (IP_ADAPTER_INFO *) new char[ulOutBufLen]; : 這樣安全嗎 No, 這不是好的 C++ 王道寫法應該是這樣: pAdapterInfo = new IP_ADAPTER_INFO; : 如果沒問題的話 : 我使用 : delete pAdapterInfo; 就能把這一串連續空間標記起來嗎? 他會歸還所有的空間 但是 但是在歸還所有空間之前會先炸掉 因為你前面用 new char[] 所以沒呼叫 IP_ADAPTER_INFO 的 ctor 這邊卻 delete 一個指向 IP_ADAPTER_INFO 的 pointer 所以會呼叫 dtor 這個例子中因為 IP_ADAPTER_INFO 是一個 POD struct 沒有 ctor/dtor 所以不會引發問題 : 相較於delete / new : malloc / free 是不是就沒這問題了? : free(pAdapterInfo) 他就是會從 這個起始位址 free到 他剛剛配置的空間的結尾. 因為 : 我看他範例就直接free了... : ps.請問有沒有什麼方式 可以驗證 我確實delete 標記掉了多少byte嗎? : 因為我也不知道我自己這樣寫有沒有問題~~ 謝謝 : 謝謝 standard library 會自行記錄每塊分配出去的記憶體占多少空間 所以歸還的時候不需要指定大小 這點 free 和 delete 是相同的 不過我覺得你比較大的問題是不知道前因後果就開始寫code了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.3.139

01/11 18:57, , 1F
不少寫code的人其實不知到前因後果吧.. (自己就算XD
01/11 18:57, 1F

01/11 19:21, , 2F
用new也是會呼叫建構子的http://ideone.com/8oD9I
01/11 19:21, 2F

01/11 19:22, , 3F
new、delete與malloc、free最大的不同就是在於
01/11 19:22, 3F

01/11 19:23, , 4F
c++支援的會呼叫建構子及初始化,c只單純分配
01/11 19:23, 4F

01/11 19:56, , 5F
littleshan說的是指new char[]不會呼叫IP_ADAPTER_INFO的
01/11 19:56, 5F

01/11 19:56, , 6F
ctor,而非new不會call ctor吧?
01/11 19:56, 6F

01/11 20:08, , 7F
誤會了- -...
01/11 20:08, 7F

01/11 22:20, , 8F
new char[]再轉型比較常用在客製化的memory pool..
01/11 22:20, 8F

01/11 22:29, , 9F
通常不是直接轉 而是placement new
01/11 22:29, 9F
文章代碼(AID): #1F3MEpmn (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F3MEpmn (C_and_CPP)