why use virtual destructor in inheritance
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
When to use virtual destructors?
假设我有一个抽象类动物
1 2 3 4 5 6 7 8 9 10 | class Animal { public: Animal(const std::string &name) : _name(name) { } virtual void Print() const = 0; virtual ~Animal() {} protected: std::string _name; }; |
我有狗和猫继承了这个阶级。在我正在读的一本书中,建议在基类中定义一个虚拟析构函数。我试图创建没有虚拟des定义的对象,程序运行良好,没有泄漏(用valgrind检查)。所以我的问题是为什么使用虚拟析构函数(使用空实现)?它的好处是什么?
谢谢您!
当你有这样的东西时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Dog : public Animal { public: Dog() { data = new char[100000]; } ~Dog() { delete data; } private: char* data; }; Animal* dog = new Dog; delete dog; |
没有虚拟析构函数,编译器使用动物类的析构函数。在dog类中分配的内存将泄漏。在基类中定义虚拟析构函数时,编译器使用dog类中的析构函数并释放分配的内存。