我的回答here收到了關於我的代碼中的內存分配的評論。我已經使用new[]
和delete[]
,因爲我之前讀過,您絕對不應該在C++中使用malloc()/free()
(即here)。有問題的代碼基本上是:爲PODs正確分配內存
ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
GetAdaptersAddresses(0, 0, NULL, NULL, &outBufLen);
PIP_ADAPTER_ADDRESSES pCurrAddresses = (IP_ADAPTER_ADDRESSES *)new uint8_t[outBufLen];
//...
delete[] pCurrAddresses;
的內存字節大小,這是我要分配來自功能GetAdaptersAddresses()
。 我的問題是:這段代碼有什麼問題嗎?如果是的話,現代C++的合適方式是在那裏分配內存?
malloc()/free()
應該是不成問題的 - 這是C++代碼,我沒有看到在使用malloc()
代替new[]
這裏任何改善。對?std::vector<>
似乎不是我的權利 - 我可以寫std::vector<uint8_t> bytes(outBufLen, 0); PIP_ADAPTER_ADDRESSES pCurrAddresses = (IP_ADAPTER_ADDRESSES *)bytes.data();
但我有一個壞的 感覺,因爲std::vector<>::data()
是常數)。- 使用
std::unique_ptr<uint8_t[]>
似乎也很奇怪 - 因爲無論如何我必須將它轉換爲原始指針。
任何替代品?
'std :: vector :: data()'只有在'const'向量上調用時才返回'const T *'。否則,調用非''constst'超載,返回'T *'。 –