C++之智能指针
我们都知道,C和C++常被人诟病的一点就是程序员需要自己来维护对动态内存的申请和释放,具体来说就是malloc/free和new/delete的成对出现。能够保证它们成对出现,是一个良好的编程习惯,但是即使做到这一点,就能够保证万无一失吗?我们看一个例子: 我们先定义一个简单的类A: class A { public: int a; inline void print(){cout << a << endl;} }; A * ptr = new A; ... delete ptr; 正常情况下,这段代码顺利执行则不会出现问题。但是当在执行delete操作之前如果程序抛出异常呢?这样就会导致delete不能够执行,进而导致内存泄露。解决办法很多,比如使用异常来控制,但是这样就会显得逻辑混乱,而且不够优美。这里我们介绍下智能指针(smart pointer)。 C++中包含众多的智能指针,比如STL中的auto_ptr,boost库中的shared_ptr,weak_ptr,scoped_ptr,intrusive_ptr等。我们一一介绍。 1.智能指针之 auto_ptr auto_ptr是包含在标准库中,只需要#include <memory>头文件即可。我们先看下auto_ptr的用法: auto_ptr<A> ptr(new A); ptr->print(); 可以看出