c++ - memset, memcpy with new 运算符

标签 c++ memory-management

我能否在 C++ 中可靠地使用 memset 和 memcpy 运算符并使用 new 分配内存?

编辑:

是的,分配原生数据类型

例子

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));

最佳答案

只要您只使用 new 来分配内置和/或 POD 类型,就可以。但是,像这样:

std::string * s = new string;
memset( s, 0, sizeof(*s) );

那么你会看到灾难。

不过我不得不问,为什么您和其他人似乎如此迷恋这些函数 - 我不相信我曾经在自己的代码中使用过它们。使用具有自己的复制和赋值功能的 std::vector 似乎是 memcpy() 的更好选择,而且我从来没有真正相信将所有内容设置为零的魔法,这似乎是 memset( ).

关于c++ - memset, memcpy with new 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981568/

相关文章:

c++ - 在 View 中用 ID 替换字符串的简单方法

c++ - 很难理解带有 async_read 和 async_write 的 Boost ASIO TCP 的一些概念

c++ - 在 vector<vector<string>> 上使用 push_back

c++ - 堆栈与堆属性的 QT 特定差异?

javascript - QML 元素的 Qt 内存管理

memory-management - 没有足够的内存来运行整个 docker-compose 堆栈

c - 为什么这种奇怪的内存分配行为

c++ - 将可变参数模板内容转储到二维数组

C++ 如何运行 2 boost :asio: io_context at the same time

memory - 什么时候应该避免在 Clojure 中使用 `seq`?