标题:用auto_ptr解决内存泄露的问题 出处:Felix021 时间:Thu, 08 Jan 2009 01:13:24 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?1391 内容: 昨天看的《C++标准函数库》,看到auto_ptr这一节,说到了关于内存泄露的问题 而且有些情况以前根本没有考虑到,想想觉得好危险。 典型的情况就是如下的代码: void foo(){ int *p = new int[10]; //do sth. delete[] p; } 如果在//do sth.的时候退出了函数,比如一个return语句,或者是抛出了一个异常 那么最后的delete p就不会被执行,于是就造成了内存的泄露。 更极端一点的情况是,可能申请了多个内存,有多处return,如果每一个都要处理,那程序就太恶心了。 但是不处理又是不行的——于是需要有一种方式来解决,于是标准库就引进了auto_ptr 智能指针。 这个东西保证它自己被销毁的时候能够释放其指向的对象(使用delete)。 一个简单的例子是: #include //auto_ptr在头文件memory里面哦 using namespace std::auto_ptr; //它在namespace std里面哦 void foo(){ std::auto_ptr p(new classA); //do sth. //no need to free p; } 在退出函数foo()的时候,p的析构函数会被调用,自动释放它指向的classA,于是再也不用费神去写delete了,真好~ 不过auto_ptr不是基于引用计数的智能指针,所以有一些很特殊的属性。 如果想要用它,一定一定要都了解了才用哦!就推荐看这本书《The C++ Standard Library》C++标准函数库。 Generated by Bo-blog 2.1.0