1. 父类的destructor是非虚函数
#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 A2. 父类的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 Awe should use virtual destructors if we call delete on a base class pointer which points to a derived class.
本文详细解析了C++中析构函数的虚实特性,通过实例演示了虚析构函数如何确保基类指针指向派生类时能够正确调用派生类的析构函数,避免资源泄漏。并通过对比实析构函数的行为,展示了虚析构函数在内存管理中的关键作用。
2309

被折叠的 条评论
为什么被折叠?



