我想将派生结构的所有成员清零。
有数百个成员,并且每隔一段时间就会添加更多成员,因此我觉得显式初始化它们很容易出错。
该结构没有虚函数,所有成员字段都是内置的。然而,它们并不是 POD,因为它们具有不平凡的构造函数。
除了对这种做法的标准皱眉之外,您还发现以下问题吗?
struct Base
{
// Stuff
};
struct Derived : public Base
{
// Hundreds of fields of different built-in types
// including arrays
Derived()
{
::memset(reinterpret_cast<char*>this + sizeof (Base), 0, sizeof *this - sizeof (Base));
}
};
Thanks.
这假设Base
基类子对象位于Derived
。如果您添加另一个基类,这将不起作用。
此外,您的代码是错误的:指针算术是根据对象执行的,而不是根据字节执行的。你需要使用reinterpret_cast<char*>(this)
以字节为单位执行算术。无论如何,你仍然不应该这样做。
考虑以下利用值初始化的、不难看的、符合标准的方法:
struct Derived : public Base
{
struct DerivedMembers { /* ... */ }
DerivedMembers data;
Derived() : data() { }
};
只要DerivedMembers
没有构造函数,这将初始化每个数据成员的值data
,这看起来正是您想要的行为。
或者,如果您希望无需使用“即可访问成员”data
" 成员变量,考虑使用另一个基类:
struct DerivedMembers { /* ... */ }
struct Derived : Base, DerivedMembers
{
Derived() : DerivedMembers() { }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)