#include <iostream>
using namespace std;
class Point {
public:
//如果这里不写成虚拟的析构函数,子类就会有内存泄漏
//virtual ~point()
//{
// cout<<"point out"<<endl;
//}
~Point()
{
cout<<"point out"<<endl;
}
};
class Cson:public Point
{
public:
char* data;
Cson()
{
data = (char*)malloc(5);
}
~Cson()
{
cout<<"cson out"<<endl;
free(data);
data = NULL;
}
};
int main()
{
Cson* son = new(std::nothrow) Cson;
Point* point = NULL;
if (NULL != son)
{
point = son;
delete point;
}
system("pause");
}
//输出结果
/*
point out
请按任意键继续. . .
*/
//子类的析构函数根本没被调用,除非父类的析构函数被声明为virtual
//当然直接delete son,肯定是会调用父类的析构函数的,就不存在问题c++基类不为虚析构函数的一个风险
最新推荐文章于 2026-03-07 20:28:59 发布
本文探讨了C++中类的析构函数如何影响内存管理,特别是当子类继承父类时析构函数的重要性。通过实例展示了如何避免内存泄漏并正确释放资源。
433

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



