【发布时间】:2010-09-11 20:14:01
【问题描述】:
不必记住初始化一个简单的“C”结构,我可以从它派生并在构造函数中将其归零,如下所示:
struct MY_STRUCT
{
int n1;
int n2;
};
class CMyStruct : public MY_STRUCT
{
public:
CMyStruct()
{
memset(this, 0, sizeof(MY_STRUCT));
}
};
这个技巧通常用于初始化 Win32 结构,有时可以设置无处不在的 cbSize 成员。
现在,只要没有用于 memset 调用销毁的虚函数表,这是一种安全的做法吗?
【问题讨论】:
-
这个“技巧”通常被不知道如何使用 C++ 初始化功能的人使用。 C++ 已经有一个功能可以完全满足您的需求,但没有任何“技巧”。有关详细信息,请参阅 litb 的回复,但以防万一:将
MYSTRUCT()(是的,带有空大括号)放入CMyStructs 构造函数初始化程序列表中将对基类子对象进行零初始化,而无需任何memsethacks。 -
我同意 AndreyT 的回答。您应该将 litb 的答案视为您的问题的正确答案(是的,这意味着不考虑我的问题,但是嘿,这是游戏!)... ^_^ ...
标签: c++ data-structures