泄漏内存

在局部作用域内,用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 的对象.
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章