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 &)