gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:13 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com