Re: [問題] delete / new , free / malloc
※ 引述《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
01/11 18:57, 1F
→
01/11 19:21, , 2F
01/11 19:21, 2F
→
01/11 19:22, , 3F
01/11 19:22, 3F
→
01/11 19:23, , 4F
01/11 19:23, 4F
推
01/11 19:56, , 5F
01/11 19:56, 5F
→
01/11 19:56, , 6F
01/11 19:56, 6F
→
01/11 20:08, , 7F
01/11 20:08, 7F
推
01/11 22:20, , 8F
01/11 22:20, 8F
→
01/11 22:29, , 9F
01/11 22:29, 9F
討論串 (同標題文章)