智能指针总结

智能指针的作用:用于管理对象的生命周期

智能指针是一个栈对象,用于管理对象的堆内存。使用它的get()函数才能返回它的裸指针。

 

  • auto_ptr  用于管理单个对象的堆内存【容错率太低】
  1. 最好不要使用赋值运算符=,会让出访问所有权,致使自己访问出错
  2. 使用release方法会让出所有权后不能自动调用析构函数,致使不会自动释放对象,造成内存泄漏
  3. 因为不能使用赋值运算符所以不能用于vector等容器
  • unique_ptr  相当于auto_ptr的加强版,
  1. 独占对象所有权,不能使用拷贝函数和赋值函数
  2. 但可以通过release或reset转移对象的所有权 

        unique_ptr up1(new int(1));
  unique_ptr up2(up1.release());

  • scoped_ptr 也是用于管理单个对象的堆内存
  1. 独享所有权,强制不能使用release()函数
  2. 也不能用赋值运算符,所以对某些需要共享的情况不适用
  3. 也不支持转移所有权【和unique_ptr区分】
  • shared_ptr  管理单个堆内存对象 用于共享所有权,用引用计数表明

           ptr.use_count()

  • weak_ptr:为shared_ptr准备的,一般用于需要访问共享对象但又不想改变引用计数的情况下,比如基类查询子类的共享指针

你可能感兴趣的:(c++)