在局部作用域内,用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 的对象.