为pod分配适当的内存

Proper allocate memory for PODs

本文关键字:内存 pod 分配      更新时间:2023-10-16

我的回答收到了一个关于我代码中的内存分配的评论。我使用了new[]delete[],因为我以前读过,你不应该在c++中使用malloc()/free()(即这里)。所讨论的代码本质上是:

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()是const)。

  • 使用std::unique_ptr<uint8_t[]>似乎也很奇怪-因为我必须将其转换为原始指针。

替代品吗?

在大多数情况下,您使用std::vector的第二个建议在c++中是正确的。data()不是const(好吧,它是const向量,但在您的情况下,它不是)。c++标准确保data()返回指向您的pod的连续内存存储的指针。