return new 内存泄漏
样例如下:
#include <iostream> class B { public: int Fun() { return 100; } } class A { public: B* CreateB() //new了个B对象 { return new B(); } } int main() { A *aa=new A(); std::cout<<A->CreateB()->Fun(); //new的B对象没有被delete掉,内存泄漏 delete aa; aa=nullptr; return 0; }
解决方式:
1、方式一
智能指针【推荐此方式】
#include <memory> //for unique_ptr class A { public: std::unique_ptr<B> CreateB() //new了个B对象 { std::unique_ptr<B> up_b(new B()); //使用智能指针,会自动释放资源 return up_b; } }
2、方式二
再写个删除函数
class A { public: B* CreateB() //new了个B对象 { return new B(); } void DeleteB(B** pObj) //释放B对象 { if(pObj!=nullptr && *pObj!=nullptr) { delete *pObj; *pObj=nullptr; } } } int main() { A *aa=new A(); B *bb=aa->CreateB(); //其中new了个B对象 std::cout<<bb->Fun(); aa->DeleteB(&bb); //释放B对象 delete aa; aa=nullptr; return 0; }
3、方式三
int main() { A *aa=new A(); B *bb=aa->CreateB(); //其中new了个B对象 std::cout<<bb->Fun(); delete bb; //释放B对象 bb=nullptr; delete aa; aa=nullptr; return 0; }
分类:
C++基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-09-01 与word、excel交互问题总结
2018-09-01 Java线程的中断.interrupt
2018-09-01 线程的生命周期
2018-09-01 Java线程的加入.join()
2016-09-01 二维小波包分解wpdec2