天天看點

抛磚引玉篇--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 &)

繼續閱讀