Es una idea terrible. Simplemente está analizando los datos, sin prestar atención a cómo deberían inicializarse los objetos. Si tu clase es virtual, es probable que elimines el puntero vtable también.
memset
funciona en datos sin procesar, pero C++ no se trata de datos sin procesar. C++ crea abstracciones, así que si quieres estar seguro usas esas abstracciones. Use la lista de inicializadores para inicializar miembros.
Usted puede hacerlo a tipos de POD:
struct nothing_fancy_here
{
bool b;
int i;
void* p;
};
nothing_fancy_here x;
memset(&x, 0, sizeof(x));
Pero si lo estás haciendo en this
, que significa que está en un constructor definido por el usuario y ya no califica como un tipo POD . (Aunque si todos sus miembros son POD, podría funcionar, siempre y cuando ninguno contenga 0 como valor de trampa. Estoy seguro de que no estoy seguro si entran en juego otras fuentes de comportamiento indefinido.)
Puede usar el siguiente enfoque: http://stackoverflow.com/a/38103250/3223828 –