抛砖引玉篇--scoped_ptr 和 unique_ptr

1.
auto_ptr:可以实现管理对象所有权的转移。 

A = B ;    //将B赋值给A,则B对象被销毁(不可再用),其管理的对象资源已转移到A。

shared_ptr:可以实现管理对象所有权的共享

unique_ptr:可以实现管理对象所有权的单独占用


2.
unique_ptr对象不可以通过复制构造和赋值获得,
但可以通过移动构造和移动赋值获得。
所以函数可以返回一个unique_ptr对象,因为调用的是移动构造函数。

 

3.
  scoped_ptr是boost库中智能指针,类似于c++11中unique_ptr.

  scoped_ptr, 它能保证在离开作用域之后它所管理对象能被自动释放。


4.
  特点——不能共享控制权

   scoped_ptr不能通过其他scoped_ptr共享控制权,
   因为在scoped_ptr类的内部将拷贝构造函数和=运算符重载定义为私有的

 

5.

在以下情况时使用scoped_ptr:

在可能有异常抛出的作用域里使用指针
函数里有几条控制路径
动态分配对象的生存期应被限制于特定的作用域内
异常安全非常重要时(始终如此!)


6.

  如果想实现某个类的对象是独一无二的,
  可以将该类的拷贝构造函数和 = 操作符私有化
  这可以避免类对象调用该方法。
  但这还不够严谨,因为友元可以访问类的私有成员,所以,
  除了将其申明为私有化之外,还应该只申明,不定义其实现方法。


7.
  auto_ptr ,scoped_ptr和unique_ptr都不能用于STL容器,
  因为STL容器需要调用对应类的构造函数,并且该构造函数不能改变引用参数(也就是const &)

你可能感兴趣的:(unique_ptr,scoped_ptr,智能指针,动态内存管理)