Why does a destructor in base class need to be declared virtual?
2012-08-10 15:17
489 查看
1. 父类的destructor是非虚函数
运行结果,
2. 父类的destructor是虚函数
运行结果:
we should use virtual destructors if we call delete on a base class pointer which points to a derived class.
#include <iostream> using namespace std; class A { public: ~A() { cout << "I am in A" << endl; } }; class B:public A { public: ~B() { cout << "I am in B" << endl; } }; int main() { A* a = new B(); delete a; }
运行结果,
>> ./a.out I am in A
2. 父类的destructor是虚函数
>> cat dest.C #include <iostream> using namespace std; class A { public: virtual ~A() { cout << "I am in A" << endl; } }; class B:public A { public: ~B() { cout << "I am in B" << endl; } }; int main() { A* a = new B(); delete a; }
运行结果:
>> ./a.out I am in B I am in A
we should use virtual destructors if we call delete on a base class pointer which points to a derived class.
相关文章推荐
- Question 48: In C++, which of the following statements accurately describe a base class destructor calling a virtual function ov
- why does it suck to be an in-house programmer?
- ERROR: "This virtual machine appears to be in use"
- 虚拟机无法开机提示:This virtual machine appears to be in use
- rhel 6.4 device eth0 does no seem to be present delaying initalization
- Some knowledge about why we need to new and delete everything in one module
- why do we need virtual methods in C++?
- 断电或强制退出后VMware虚拟机出现The virtual machine appears to be in u...
- VM错误解决:This Virtual Machine Appears To Be In Use
- Prefer to make base class virtual functions private
- Cannot update VMware Tools correctly :the configuration program is to be executed in a virtual match
- JAVA报错:Variable 'vv' is accessed from within inner class, needs to be declared final
- ERROR: "This virtual machine appears to be in use"
- Exception in thread "main" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to ja
- 'tools.jar' seems to be not in Android Studio classpath----Android Studio启动时问题
- VMware Workstation 出现 "This virtual machine appears to be in use."的问题
- ERROR: "This virtual machine appears to be in use"
- Need to specify class name in environment or system property, or as an applet parameter, or in a
- This Virtual Directory does not allow contents to be listed
- javax.naming.NoInitialContextException: Need to specify class name in XXX解决