gpt4 book ai didi

C++,在没有每个成员分配的情况下重置类成员

转载 作者:行者123 更新时间:2023-11-30 04:36:09 24 4
gpt4 key购买 nike

在纯 C 中,在实例化后重置结构是很常见的:

struct MyClass obj;
memset( &obj, 0, sizeof(struct MyClass) );

这很方便 - 特别是在使用面向对象的范例时,因为无论随着时间的推移添加了多少成员,所有成员都保证被重置为 null 等。

我正在寻找一种在 C++ 中执行相同操作的方法。显然你不能简单地重置内存,因为 vtable 是它的一部分。另外,在我的特殊情况下,我不能使用模板。

我见过的一个解决方案是声明一个包含所有 成员的结构,然后您可以一次性重置它:

class MyClass{

MyClass(){ memset(&m, 0, sizeof(m)); }

struct{
int member;
} m;
};

不过,我不是很喜欢这个解决方案。

我想“hacks”是可用的,如果你知道,也请说明使用它的风险,例如如果它在编译器之间可能有所不同等。

谢谢

最佳答案

如果你想确保你分配的内存块为零,你可以使用放置新操作符:

size_t sz = sizeof(MyClass);
char *buf = new char[sz];
memset(buf, 0, sz);
MyClass* instance = new (buf) MyClass;

关于C++,在没有每个成员分配的情况下重置类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4756973/

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