¿Cómo hacer el equivalente de memset (esto, ...) sin obstruir el vtbl?

Sé que memset está mal visto porclass inicialización Por ejemplo, algo como lo siguiente:

class X { public: 
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;

golpeará elvtbl si hay unvirtual Funciona en la mezcla.

Estoy trabajando en una base de código heredada (gigantesca) que es C-ish pero compilada en C ++, por lo que todos los miembros en cuestión son típicamente POD y no requieren constructores de C ++ tradicionales. El uso de C ++ se va arrastrando gradualmente (como las funciones virtuales), y esto afecta a los desarrolladores que no se dan cuenta de que memset tiene estos dientes de C ++ adicionales.

Me pregunto si hay una forma segura de C ++ de realizar una inicialización inicial de cero, que podría ir seguida de una inicialización específica por miembro, donde la inicialización de cero no es apropiada.

Encuentro las preguntas similaresmemset para inicialización en C ++ypuesta a cero de estructuras derivadas usando memset. Ambos tienen respuestas "no use memset ()", pero no tienen buenas alternativas (especialmente para estructuras grandes que posiblemente contengan muchos miembros).

Respuestas a la pregunta(7)

Su respuesta a la pregunta