Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khi nào nên dùng destructor ảo (virtual destructor) trong C++?


Scott Meyers trong Effective C++ nói: Nếu lớp có bất kỳ hàm ảo nào, nó nên có destructor ảo; và các lớp không thiết kế làm base class hoặc không dùng đa hình không nên khai báo destructor ảo.

Nên khai báo destructor ảo trong base class đa hình. Vì nếu tạo đối tượng base class bằng constructor derived:

Base *b = new Derived();
// sử dụng b
delete b;

Nếu destructor của Base không ảo, delete b có hành vi chưa định nghĩa. Lời gọi destructor được giải quyết như code non-virtual. Chỉ destructor Base được gọi, destructor Derived không chạy -> rò rỉ tài nguyên.