Como fazer o equivalente a memset (isso,…) sem danificar o vtbl?
Eu sei que o memset é desaprovado porclass
inicialização. Por exemplo, algo como o seguinte:
class X { public:
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
vai destruir ovtbl
se houvervirtual
função na mistura.
Estou trabalhando em uma base de código legado (gigantesca) que é C-ish, mas compilada em C ++, portanto, todos os membros em questão são tipicamente POD e não requerem nenhum construtor C ++ tradicional. O uso de C ++ se insinua gradualmente (como funções virtuais), e isso afeta os desenvolvedores que não percebem que o memset possui esses dentes C ++ adicionais.
Eu estou querendo saber se há uma maneira segura de C ++ para fazer uma inicialização zero pega-tudo inicial, que poderia ser seguida por inicialização específica por membro onde zero inicialização não é apropriada?
Eu acho as perguntas semelhantesmemset para inicialização em C ++ezerando struct derivada usando memset. Ambas as respostas "não usam memset ()", mas não há boas alternativas (especialmente para grandes estruturas potencialmente contendo muitos membros).