You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shared_ptr智能指针会自动释放数组所占用的内存空间吗?

shared_ptr管理数组内存的常见问题

问题本质

当通过shared_ptr<double> p(new int[10]);这种方式让shared_ptr接管数组内存时,会引发内存泄漏。原因是shared_ptr的默认析构逻辑是调用delete而非delete[]——这只会释放数组第一个元素的内存,剩余元素对应的空间无法被正确回收。

你提供的Matrix构造函数代码:

Matrix::Matrix(size_t m, size_t n) {
  shared_ptr<double> data_(new double[m * n]);
  m_ = m;
  n_ = n;
}

同样存在这个问题:new double[m * n]分配的是连续的数组内存,但shared_ptr默认用delete释放,导致除第一个double外的其他内存块都无法被正确回收,造成内存泄漏。

正确的处理方式

要让shared_ptr正确管理数组内存,有两种可靠方案:

  • 方案一:手动指定删除器,让shared_ptr调用delete[]完成释放
    shared_ptr<double> data_(new double[m * n], [](double* ptr) { delete[] ptr; });
    
  • 方案二:使用C++17及以后标准支持的shared_ptr数组特化版本(如果不需要共享所有权,使用std::unique_ptr<T[]>会更高效)
    shared_ptr<double[]> data_(new double[m * n]);
    

内容的提问来源于stack exchange,提问作者Lionnel104

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:35:01