memset が初期化のために眉をひそめていることは知っていclass
ます。たとえば、次のようなものです。
class X { public:
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
ミックスに関数 vtbl
がある場合は上書きします。virtual
私は、C っぽいが C++ でコンパイルされた (巨大な) レガシー コードベースに取り組んでいるため、問題のすべてのメンバーは通常 POD であり、従来の C++ コンストラクターは必要ありません。C++ の使用は (仮想関数のように) 徐々に忍び寄ってきており、memset にこれらの追加の C++ の知識があることに気付いていない開発者はこれに悩まされています。
最初のキャッチオールゼロ初期化を行うC++の安全な方法があり、その後にゼロ初期化が適切でない特定のby-member初期化が続く可能性があるかどうか疑問に思っていますか?
C++での初期化と memsetを使用した派生構造体のゼロ化について、同様の質問 memset を見つけました。これらの両方に「memset() を使用しない」という回答がありますが、適切な代替手段はありません (特に、多くのメンバーを潜在的に含む大きな構造の場合)。