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

C++中vector<A>*类型代码是否存在内存泄漏?代码排查问询

代码中存在内存泄漏吗?

是的,这段代码确实存在内存泄漏。

原因分析:

  • 在_array()函数中,你通过new vector<A>()动态分配了vector<A>对象的内存,并返回了它的指针。
  • 在main()函数里,你接收了这个指针,但从未调用delete释放这块内存。
  • 虽然类A中的shared_ptr<int>会自动管理它指向的int类型内存,但这仅负责A内部成员的内存,无法覆盖外层vector<A>本身的动态分配内存。程序结束时,这块vector的内存不会被自动回收,从而造成泄漏。

修复方案:

有几种常见的解决方式:

  1. 手动释放内存:在main()末尾调用delete a;,确保动态分配的vector被回收:
int main(){
    vector<A> *a = _array();
    // 使用a完成操作
    delete a; // 释放内存
}
  1. 使用智能指针管理vector:把原始指针替换为std::unique_ptr或std::shared_ptr,让智能指针自动处理内存释放:
#include <memory> // 需包含头文件

std::unique_ptr<vector<A>> _array(){
    return std::make_unique<vector<A>>();
}

int main(){
    auto a = _array();
    // 无需手动delete,智能指针会在生命周期结束时自动释放内存
}
  1. 直接返回vector对象而非指针:这是最推荐的方式,利用C++的返回值优化(RVO),完全避免动态分配:
vector<A> _array(){
    vector<A> vec;
    // 填充vec的逻辑
    return vec;
}

int main(){
    vector<A> a = _array();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:55:20