樣例如下:
#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; }