我正在为我的工作修复旧代码。它目前是用 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/