我知道 memset 不赞成class
初始化。例如,如下所示:
class X { public:
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
vtbl
如果混合中有一个virtual
函数, 将会破坏。
我正在开发一个(巨大的)遗留代码库,它是 C-ish 但用 C++ 编译的,所以所有有问题的成员通常都是 POD,不需要传统的 C++ 构造函数。C++ 的使用逐渐普及(就像虚函数一样),这让那些没有意识到 memset 具有这些额外的 C++ 牙齿的开发人员陷入了困境。
我想知道是否有一种 C++ 安全的方法来进行初始的全部零初始化,然后可能是不适合零初始化的特定的成员初始化?
我发现类似的问题memset 用于 C++ 中的初始化,并使用 memset 将派生结构归零。这两个都有“不要使用 memset()”的答案,但没有好的选择(尤其是对于可能包含许多成员的大型结构)。