/*Child is inherited from Parent*/
class Parent {
public:
Parent() //Constructor
{
cout << "\n Parent constructor called\n" << endl;
}
protected:
~Parent() //Dtor
{
cout << "\n Parent destructor called\n" << endl;
}
};
class Child : public Parent
{
public:
Child() //Ctor
{
cout << "\nChild constructor called\n" << endl;
}
~Child() //dtor
{
cout << "\nChild destructor called\n" << endl;
}
};
int main()
{
Parent * p2 = new Child;
delete p2;
return 0;
}
Nếu tôi tạo Parent
phá hủy ảo, thì tôi gặp lỗi, vậy mục đích của việc tạo một destructor ảo được bảo vệ là gì?Có cách nào để tạo một trình phá hủy được bảo vệ ảo không?
Có lẽ chúng ta nên bắt đầu bằng "tại sao bạn nên bảo vệ dtor?". –
Tại sao bạn lại muốn làm cho destructor ảo? Không nên * bạn * biết mục đích? Một destructor được bảo vệ có nghĩa là các đối tượng không nên bị phá hủy thông qua các con trỏ cơ sở, vì vậy mã trong 'main' là sai. – thiton
Xem http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – user998692