To okropny pomysł. Po prostu miażdżysz dane, nie zwracając uwagi na sposób inicjowania obiektów. Jeśli twoja klasa jest wirtualna, prawdopodobnie zlikwidujesz również wskaźnik vtable.
memset
działa na surowych danych, ale w C++ nie chodzi o surowe dane. C++ tworzy abstrakcje, więc jeśli chcesz być bezpieczny, korzystasz z tych abstrakcji. Użyj listy inicjalizatora, aby zainicjować członków.
Ty może zrobić typów POD:
struct nothing_fancy_here
{
bool b;
int i;
void* p;
};
nothing_fancy_here x;
memset(&x, 0, sizeof(x));
Ale jeśli robisz to na this
, co oznacza, że jesteś w konstruktora zdefiniowanego przez użytkownika i nie kwalifikują się jako typ POD . (Chociaż jeśli wszyscy twoi członkowie to POD, może to zadziałać, o ile żadna z nich nie zawiera wartości pułapki 0, jestem pewien, że nie ma tu zastosowania żadne inne źródło niezdefiniowanych zachowań.)
Możesz użyć następującego podejścia: http://stackoverflow.com/a/38103250/3223828 –