1. 为防止内存泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源。
两个常被使用的RAII classes分别是trl::shared_ptr和std::auto_ptr;前者通常是较好的选择,因为其COPY行为比较直观。若选择auto_ptr,复制动作会使他(被复制物)指向NULL;
注意上面两个指针都是负责管理堆上的资源。
2. 以独立语句将newed对象存储于(置于)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。
Process(std::trl::shared_ptr<widget>(new widget) , priority() );
从上面我们知道有这样的三个操作:
(1) New widget
(2) Priority();
(3) 调用trl::shared_ptr构造函数
我们只知道(1)肯定在(3)前面,但是至于(2)究竟在什么时候被调用,则不一定,所以当(2)出现异常时,可能1的指针将会丢失。
为了避免这样的情况,将其分离出来
std::trl::shared_ptr<widget> pw (new widget);
process(pw,priority());