【C++】智能指针

  • Post author:
  • Post category:其他


智能指针的提出:每次new出来的内存都要手动delete释放。智能指针的本质含义就是为了自动管理资源的释放,防止由于疏忽或者程序逻辑错误导致的资源泄漏问题。智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入放入指针。

1.Auto_ptr

  • 不支持复制(拷贝构造函数)和赋值(operator=),但是赋值或复制时出错但不会提示。拷贝构造没有实现,系统提供的是浅拷贝,两个指针指向同一个堆内存,最后sp1变成野指针(

    改变资源的所有权

    ),程序崩溃。
  • 支持拷贝构造和赋值,所有权会转移。

  • 不可以作为容器元素

    。容器要求所保存的类型定义复制和赋值操作符,使得它们表现的类似内置类型,在赋值或者复制之后,两个对象必须具有相同值,auto_ptr不满足。
  • 栈上的指针管理堆上的内容。

2.Unique_ptr

  • std库中的。和auto_ptr很像,不支持复制和赋值,但比auto_ptr好,是无法复制和赋值,

    直接赋值或者直接复制出错会提示

  • 可以作为函数返回值,相当于间接赋值,要用std::move,如std::unique_ptr p2 = std::move(p1);。
  • 不可以直接,

    可以间接做为容器元素

    (使用move)。

3.Scoped_ptr

  • Boost库中的,用法和auto_ptr几乎一样,也可替换,可以从一个auto_ptr



版权声明:本文为wAmber原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。