北枫TiAmo 2021-12-12 22:21 采纳率: 100%
浏览 29
已结题

类的析构函数是否会delete类的成员函数中new的堆内存?

问题遇到的现象和发生背景

如果类的析构函数不能delete类的成员函数中new的堆内存,那return后怎么delete内存啊?

问题相关代码,请勿粘贴截图
template<typename T>
class Matrix
{
    int rol;
    int col;
    T* element;
    int size;

public:
    Matrix(int a=0, int b=0, T* c=NULL, int d=0)
    {
        rol = a;
        col = b;
        element = c;
        size = d;
    }

    Matrix operator +(const Matrix<T>& a)const
    {
        T* temp=new T[this->size];
        for (int i = 0; i < size; i++)
        {
            temp[i] = this->element[i] + a.element[i];
        }
        return Matrix(this->col, this->rol, temp, this->size);
         }
}; 
运行结果及报错内容

成员函数没有delete内存,但运行成功,也没报错

  • 写回答

1条回答 默认 最新

  • 关注

    不delete是不会报错的,但是频繁的new类的实例的时候,会导致内存的不断增长 (也就是所谓的内存泄露问题)。
    类的析构函数不会自动释放内存,需要你在析构函数中手动释放。

    Matrix::~Matrix()
    {
        if(element )
        {
            delete[] element;
            element =NULL;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月16日
  • 已采纳回答 12月13日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程