C++中vector<A>*类型代码是否存在内存泄漏?代码排查问询
代码中存在内存泄漏吗?
是的,这段代码确实存在内存泄漏。
原因分析:
- 在
_array()函数中,你通过new vector<A>()动态分配了vector<A>对象的内存,并返回了它的指针。 - 在
main()函数里,你接收了这个指针,但从未调用delete释放这块内存。 - 虽然类
A中的shared_ptr<int>会自动管理它指向的int类型内存,但这仅负责A内部成员的内存,无法覆盖外层vector<A>本身的动态分配内存。程序结束时,这块vector的内存不会被自动回收,从而造成泄漏。
修复方案:
有几种常见的解决方式:
- 手动释放内存:在
main()末尾调用delete a;,确保动态分配的vector被回收:
int main(){ vector<A> *a = _array(); // 使用a完成操作 delete a; // 释放内存 }
- 使用智能指针管理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,智能指针会在生命周期结束时自动释放内存 }
- 直接返回vector对象而非指针:这是最推荐的方式,利用C++的返回值优化(RVO),完全避免动态分配:
vector<A> _array(){ vector<A> vec; // 填充vec的逻辑 return vec; } int main(){ vector<A> a = _array(); }
内容的提问来源于stack exchange,提问作者Pulkit Sharma
相关产品推荐
相关产品推荐

