我正在努力为我的工作修复旧代码。目前它是用 C++ 编写的。他们将静态分配转换为动态分配,但没有编辑 memsets/memcmp/memcpy。这是我的第一次编程实习,所以我的问题就像新手一样。
以下代码是用 C 编写的,但我想用 C++ 编写(我读到 malloc 在 C++ 中不是一个好的做法)。我有两种情况:首先,我们创建了 f 。然后使用 &f 来填充零。第二个是指针*pf。我不知道如何将 pf 设置为全 0,就像前面 C++ 中的示例一样。
你能做吗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:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)