泄漏內存

在局部作用域內,用new 產生的對象, 在退出作用域之前, 不delete,就會造成內存泄漏..
代碼例子如下:
#include <string>    
#include <iostream>    
class A
{
public:
    A(){std::cout<<"constructor A"<<std::endl;};
    ~A(){std::cout<<"desstructor A"<<std::endl;};
    void test(){std::cout<<"invoke test"<<std::endl;};
};
class B:public A
{
public:
    B(){std::cout<<"constructor B"<<std::endl;};
    ~B(){std::cout<<"desstructor B"<<std::endl;};

};
void extentest()
{
  B *myb = new B();
  myb->test();
}
int main(int argc,char* argv[]){    
      extentest();
        return 0;    
}
 
允許結果:
constructor A
constructor B
invoke test
沒有調用析構函數
爲了避免這樣的後果, 通常使用boost庫裏的 shared_ptr 模板,這樣就不需要使用delete
修改void extentest()
void extentest()
{
                shared_ptr<B> myb= new B();
                myb->test();
}
當變量myb 作用域消失後,會自動刪除new B 的對象.
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章