Cơ chế ảo (virtual) chỉ hoạt động khi chúng ta có con trỏ lớp cơ sở trỏ đến đối tượng lớp dẫn xuất.
Trong C++, hàm tạo (constructor) không thể là ảo, vì khi hàm tạo của một lớp được thực thi, chưa có bảng ảo (virtual table) trong bộ nhớ, nghĩa là con trỏ ảo chưa được định nghĩa. Do đó, hàm tạo phải luôn là non-virtual.
Nhưng hàm hủy ảo (virtual destructor) là có thể.
Mã ví dụ
#include <iostream>
using namespace std;
class b {
public:
b() {
cout << "Constructing base \n";
}
virtual ~b() {
cout << "Destructing base \n";
}
};
class d: public b {
public:
d() {
cout << "Constructing derived \n";
}
~d() {
cout << "Destructing derived \n";
}
};
int main(void) {
d *derived = new d();
b *bptr = derived;
delete bptr;
return 0;
}
Kết quả đầu ra
Constructing base Constructing derived Destructing derived Destructing base