memset,memcpy with new operator

And*_*res 2 c++ memory-management

我可以在C++中可靠地使用memset和memcpy运算符,并且内存分配了新的吗?

编辑:

是的,分配本机数据类型

BYTE *buffer = 0;
DWORD bufferSize = _fat.GetSectorSize();
buffer = new BYTE[bufferSize];

_fat.ReadSector(streamChain[0], buffer, bufferSize);

ULONG header = 0;
memcpy(&header, buffer, sizeof(ULONG));
Run Code Online (Sandbox Code Playgroud)

小智 5

只要你只使用new来分配内置和/或POD类型,那么是的.但是,有这样的事情:

std::string * s = new string;
memset( s, 0, sizeof(*s) );
Run Code Online (Sandbox Code Playgroud)

然后你会看到灾难.

我不得不问,为什么你和其他人似乎很迷恋这些功能 - 我不相信我曾经在我自己的代码中使用它们.使用std :: vector,它有自己的副本和赋值工具似乎是memcpy()更好的选择,我从来没有真正相信将一切设置为零的魔力,这似乎是memset的主要用途( ).

  • @Andres就像我说的那样,使用std :: vector <char> - 它可以完成手动分配的数组所做的一切,并且更加安全和方便.你还应该看看像std :: copy这样的STL算法. (2认同)
  • @TommyA:普通值初始化会将 POD 结构归零。初始化后无需调用单独的函数。 (2认同)