如何在不破坏vtbl的情况下完成相当于memset(this,...)的操作?

Pee*_*oot 7 c++ initialization

我知道memset对class初始化不满意.例如,类似以下内容:

class X { public: 
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
Run Code Online (Sandbox Code Playgroud)

vtbl如果virtual混合中有一个功能,它会破坏它.

我正在开发一个(巨大的)遗留代码库,它是C-ish但是用C++编译,因此所有成员都是POD,不需要传统的C++构造函数.C++的使用逐渐深入(比如虚函数),这就咬了开发人员没有意识到memset有这些额外的C++牙齿.

我想知道是否有一个C++安全的方法来进行初始的全部零初始化,然后可能会跟着特定的成员初始化,其中零初始化是不合适的?

在C++中找到了用于初始化的类似问题memset,并使用memset将派生结构归零.这两个都有"不使用memset()"答案,但没有好的替代方案(特别是对于可能包含许多成员的大型结构).

Som*_*ude 1

您始终可以向这些嵌入式结构添加构造函数,因此可以说它们会自行清除。