c++ - 在 C++ 中的结构上使用 memset

标签 c++ memset memcmp

我正在为我的工作修复旧代码。它目前是用 C++ 编写的。他们将静态分配转换为动态分配但没有编辑 memsets/memcmp/memcpy。这是我的第一次编程实习,所以我的新手问题很简单。

以下代码是用 C 编写的,但我想用 C++ 编写(我读到 malloc 在 C++ 中不是一个好习惯)。我有两种情况:首先,我们创建了 f。然后你使用 &f 来填充零。第二个是指针*pf。我不确定如何像前面的 C++ 示例一样将 pf 设置为全 0。

你能不能只执行 pf = new foo 而不是 malloc 然后调用 memset(pf, 0, sizeof(foo))

struct foo { ... } f;
memset( &f, 0, sizeof(f) );

//or

struct foo { ... } *pf;
pf = (struct foo*) malloc( sizeof(*pf) );
memset( pf, 0, sizeof(*pf) );

最佳答案

是的,但前提是 foo 是 POD。如果它有虚函数或任何其他远程 C++ 风格的东西,请不要在它上面使用 memset,因为它会破坏整个结构/类的内部结构。

您可能想要代替 memset 做的是为 foo 提供一个构造函数来显式初始化其成员。

如果要用new,别忘了对应的delete。更好的方法是使用 shared_ptr :)

关于c++ - 在 C++ 中的结构上使用 memset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773927/

相关文章:

c++ - memcmp 链接器错误 Visual Studio 2015

c++ - 创建指向对象的指针队列时出错

c++ - memset 在模板类构造函数中泄漏内存

c++ - 为什么我可以使用比分配的内存更多的内存?

c - 在c中为矩阵分配内存的问题

c - memcmp 返回值的大小是什么意思?

c++ - 如何完全删除json数组元素(使用jsoncpp)

c++ - 如何修改 CMakelists for Qt5 从 Windows 到 Linux?

c++ - 删除链表C++中的节点