Đó là một ý tưởng tồi tệ. Bạn chỉ đang tromping dữ liệu, không chú ý đến cách các đối tượng nên được khởi tạo. Nếu lớp của bạn là ảo, bạn có khả năng quét sạch con trỏ vtable.
memset
hoạt động trên dữ liệu thô, nhưng C++ không phải là dữ liệu thô. C++ tạo trừu tượng, vì vậy nếu bạn muốn an toàn, bạn sử dụng những trừu tượng đó. Sử dụng danh sách khởi tạo để khởi tạo thành viên.
Bạn thể làm điều đó với các loại POD:
struct nothing_fancy_here
{
bool b;
int i;
void* p;
};
nothing_fancy_here x;
memset(&x, 0, sizeof(x));
Nhưng nếu bạn đang làm nó trên this
, có nghĩa là bạn đang ở trong một nhà xây dựng người dùng định nghĩa và không còn đủ điều kiện như một loại POD . (Mặc dù nếu tất cả các thành viên của bạn là POD nó có thể làm việc, miễn là không chứa 0 như một giá trị bẫy. Tôi chắc chắn không chắc chắn nếu bất kỳ nguồn khác của hành vi không xác định đi vào chơi ở đây.)
Bạn có thể sử dụng phương pháp sau: http://stackoverflow.com/a/38103250/3223828 –