#include <iostream>
using namespace std;
class CA
{
private:
public:
CA(){cout << "构造" <<endl;};
~CA(){cout << "析构CA" <<endl;};
};
class CTest:public CA
{
private:
public:
CTest(){cout << "构造CTest" <<endl; }
~CTest(){cout << "析构CTest" <<endl;}
};
int main(int argc, char *argv[])
{
CTest *test = new CTest();
CA *ca = test;
delete ca;
return 0;
}运行结果:
构造
构造CTest
析构CA
Press any key to continue
此时并没有析构子类对象
如果这样写的话:
#include <iostream>
using namespace std;
class CA
{
private:
public:
CA(){cout << "构造" <<endl;};
virtual ~CA(){cout << "析构CA" <<endl;};
};
class CTest:public CA
{
private:
public:
CTest(){cout << "构造CTest" <<endl; }
~CTest(){cout << "析构CTest" <<endl;}
};
int main(int argc, char *argv[])
{
CTest *test = new CTest();
CA *ca = test;
delete ca;
return 0;
}运行结果:
构造
构造CTest
析构CTest
析构CA
Press any key to continue
可以析构子类.......
本文通过两个示例对比展示了在 C++ 中基类指针指向派生类对象时,如何正确调用析构函数以避免资源泄露。强调了在继承体系中使用 virtual 关键字声明析构函数的重要性。
2122

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



