首先我们定义一个数据类,MyData
class MyData {
public: MyData(){
m_Data = new char[10]; } ~MyData() {
delete[] m_Data; std::cout << "Delete Data" << std::endl; } private: char* m_Data = nullptr; };
接下来定义两个继承关系的类 ObjectBase 和 Object
class ObjectBase {
public: ObjectBase() {
} ~ObjectBase() {
std::cout << "Delete ObjectBase" << std::endl; } }; class Object : public ObjectBase {
public: Object() {
} ~Object() {
std::cout << "Delete Object" << std::endl; } MyData m_Data; };
然后我们执行下面的代码
ObjectBase *pData = new Object; delete pData;
可见只有类 ObjectBase 被析构了,而类 Object 并没有被析构,从而这个时候会造成内存的泄露。
如果把基类 ObjectBase 的析构函数修改为虚析构,如下所示:
class ObjectBase {
public: ObjectBase() {
} virtual ~ObjectBase() {
std::cout << "Delete ObjectBase" << std::endl; } };
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218693.html原文链接:https://javaforall.net
