C++常用的智能指针auto_ptr、shared_ptr

来源:互联网 发布:网络语 安利 编辑:程序博客网 时间:2024/06/03 05:32

利用’对象的析构函数一定会被调用’这一特性,在对象析构的时候delete资源。对于的机制是智能指针。目的是帮助自动释放资源。

常用的智能指针:STL的std::auto_ptr<>、TR1的std::tr1::shared_ptr<>

std::auto_ptr<>

auto_ptr<>在被销毁的时候(离开其scope时),将会==对其所指向对象调用delete==。
1. 不要令多个auto_ptr<>指向同一个对象,否则该对象会被delete多次;一个对象被delete多次将会导致未定义的结果甚至是致命错误;
2. auto_ptr<>不会保留副本:当拷贝一个auto_ptr<>的时候,被拷贝的那个auto_ptr<>会变成nullptr;
3. auto_ptr<>不是引用计数型的,只要它到达生命期,指向的对象就被delete;

std:: tr1::shared_ptr<>

  1. shared_ptr<>是引用计数型的,ref_cnt == 0时才delete对象
  2. shared_ptr<>的拷贝是正常的拷贝,允许保留副本

智能指针未完善的地方

  1. 以上两个智能指针只能指向delete而不能执行delete [];因此==**绝对不要使用auto/shared_ptr来指向动态数组(也没有必要使用动态数组,因为vector和string完全ok);
  2. 针对数组的替代品:boost::scoped_array、boost::shared_array;

std::tr1::shared_ptr<>有一个重载形式:第二个参数可以接收删除器deleter

当引用计数为0时,shared_ptr不delete对象,而是执行删除器deleter。
因此,可以在deleter中定制自己的管理操作。

原创粉丝点击