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

gar*_*rry 6 c++ memset memcmp

大家好.我正在为我的工作修复旧代码.它目前用C++编写.他们将静态分配转换为动态,但没有编辑memsets/memcmp/memcpy.这是我的第一次编程实习,因为我的类似于newbe的问题.

下面的代码在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) );
Run Code Online (Sandbox Code Playgroud)

Ben*_*ers 8

是的,但前提是foo是POD.如果它有虚拟函数或远程C++ ish的任何其他东西,不要在它上面使用memset,因为它会遍及struct/class的内部.

您可能想要做的而不是memset是给foo一个构造函数来显式初始化它的成员.

如果要使用new,请不要忘记相应的删除.更好的是使用shared_ptr :)

  • C和C++中的小修辞,即使是POD类型,它在技术上是未定义的行为,只需使用`memset`到零内存,然后将该内存读回除`char`类型和保证 - 无填充 - 以外的任何内容 - 位`(u)intN_t`类型.在实践中,您的实现将安排所有0字节表示空指针,0.0浮点(如在IEEE754中),依此类推,但历史上并非所有实现始终都这样做. (3认同)