继承与多态(四):虚析构函数

来源:互联网 发布:光线跟踪算法 编辑:程序博客网 时间:2024/05/21 14:50

当指向派生对象的指针被Delete时,如果基类的析构函数是虚函数(应该如此),将执行正确的操作:调用派生类析构,调用基类析构。

class Mammal{public:Mammal(){ cout << "Mammal Constructor!" << endl; }virtual ~Mammal(){cout << "Mammal Destructor!" << endl;}//需要被继承的基类,析构函数都应该设置为虚函数,否则有可能无法析构基类virtual void speak() const{cout << "Mammal speak!" << endl;}};class Dog:public Mammal{public:Dog(){cout << "Dog Constructor!" << endl;}~Dog(){cout << "Dog Destructor!" << endl;}void speak() const{ cout << "Wang wang..." << endl; }};int _tmain(int argc, _TCHAR* argv[]){Mammal* ptr= new Dog();ptr->speak();if (ptr){delete ptr;ptr = nullptr;}}

输出:

Mammal Constructor!Dog Constructor!Wang wang...Dog Destructor!Mammal Destructor!请按任意键继续. . .


0 0
原创粉丝点击