为什么用虚析构函数C++
2018-01-14 18:11
155 查看
//#include "stdafx.h" #include <iostream> using namespace std; /*如果delete一个基类的指针时, 如果它指向的是一个子类的对象, 那么析构函数不为虚就会导致无法调用子类析构函数,从而导致资源泄露*/ class Animal { public: Animal(string _name) :name(_name) {} virtual void cry() const = 0; virtual ~Animal() { cout << "~Animal" << endl; } protected: string name; }; class Mouse : public Animal { public: Mouse(string _name, bool _sex) : Animal(_name), sex(_sex) {} virtual void cry() const { cout << "I'm " << name << ". I'm " << (sex ? "boy" : "girl") << ".吱吱吱" << endl; } virtual ~Mouse() { cout << "~Mouse" << endl; } protected: bool sex; }; class Cat : public Animal { public: Cat(string _name, bool _sex) : Animal(_name), sex(_sex) {} virtual void cry() const { cout << "I'm " << name << ". I'm " << (sex ? "boy" : "girl") << ".喵喵喵" << endl; } virtual ~Cat() { cout << "~Cat" << endl; } protected: bool sex; }; class Dog : public Animal { public: Dog(string _name, bool _sex) : Animal(_name), sex(_sex) {} virtual void cry() const { cout << "I'm " << name << ". I'm " << (sex ? "boy" : "girl") << ".汪汪汪" << endl; } virtual ~Dog() { cout << "~Dog" << endl; } protected: bool sex; }; void Cry(Animal *Ap) { Ap->cry(); } void Cry2(Animal &Ar) { Ar.cry(); } void Pause() { Animal *Ap = NULL; Ap = new Mouse("Tom", 1); Cry(Ap); Cry2(*Ap); delete Ap; Ap = new Cat("Fairy", 0); Cry(Ap); delete Ap; Ap = new Dog("Jack", 1); Cry(Ap); delete Ap; } int main() { Pause(); system("pause"); return 0; }
相关文章推荐
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++多态为什么要定义虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中的为什么需要虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++中基类的析构函数为什么要用virtual虚析构函数
- 为什么析构函数总是虚函数?如果这是必要的,那么为什么C++不把虚析构函数直接作为默认值?
- C++ 为什么要虚析构函数
- c++ primer plus阅读笔记13---虚函数 为什么要虚析构函数?
- 为什么我希望用C而不是C++来实现ZeroMQ
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
- 为什么C++会成功
- 为什么C++中空类和空结构体大小为1?