Computer >> Máy Tính >  >> Lập trình >> C ++

Khi nào sử dụng hàm hủy ảo trong C ++?


Scott Meyers trong C ++ hiệu quả nói -

Nếu một lớp có bất kỳ hàm ảo nào, nó phải có một hàm hủy ảo và các lớp không được thiết kế để trở thành các lớp cơ sở hoặc không được thiết kế để sử dụng đa hình không nên khai báo hàm hủy ảo.

Vì vậy, bạn nên khai báo hàm hủy ảo trong các lớp cơ sở đa hình. Điều này là do nếu bạn tạo một đối tượng của lớp cơ sở bằng cách sử dụng một hàm tạo dẫn xuất -

Base *b = new Derived();
// use b
delete b;

Nếu hàm hủy của Base không phải là ảo thì xóa b có hành vi không xác định trong trường hợp này. Lệnh gọi tới hàm hủy sẽ được giải quyết giống như bất kỳ mã không phải ảo nào. Vì vậy, hàm hủy của lớp cơ sở sẽ được gọi nhưng không phải là hàm của lớp dẫn xuất, điều này sẽ dẫn đến rò rỉ tài nguyên.