智慧型指標 二 scoped ptr

2021-07-08 11:49:16 字數 1242 閱讀 6914

boost::scoped_ptr特點

boost::scoped_ptr的實現和std::auto_ptr非常類似,都是利用了乙個棧上的物件去管理乙個堆上的物件,從而使得堆上的物件隨著棧上的物件銷毀時自動刪除。不同的是,boost::scoped_ptr有著更嚴格的使用限制——不能拷貝。這就意味著:boost::scoped_ptr指標是不能轉換其所有權的。

不能轉換所有權

boost::scoped_ptr所管理的物件生命週期僅僅侷限於乙個區間(該指標所在的"{}"之間),無法傳到區間之外,這就意味著boost::scoped_ptr物件是不能作為函式的返回值的(std::auto_ptr可以)。

不能共享所有權

這點和std::auto_ptr類似。這個特點一方面使得該指標簡單易用。另一方面也造成了功能的薄弱——不能用於stl的容器中。

不能用於管理陣列物件

由於boost::scoped_ptr是通過delete來刪除所管理物件的,而陣列物件必須通過deletep來刪除,因此boost::scoped_ptr是不能管理陣列物件的,如果要管理陣列物件需要使用boost::scoped_array類。

它的常用操作如下:

成員函式

功能operator

*()

以引用的形式訪問所管理的物件的成員

operator

->()

以指標的形式訪問所管理的物件的成員

reset()

釋放所管理的物件,管理另外乙個物件

swap(scoped_ptr& b)

交換兩個boost::scoped_ptr管理的物件

class testsample

; ~testsample()

; void printsomething()

;private:

int num = 0;

};int _tmain(int argc, _tchar* argv)

輸出:

testsample constructor...!

testsample printsomething...

testsample destructor...!

請按任意鍵繼續. . .

scoped_array說明:

接受陣列指標new

智慧型指標 scoped ptr

scoped ptr scoped ptr是乙個類似auto ptr的智慧型指標,它包裝了new操作符在堆上分配的動態物件,能夠保證動態建立的物件在任何時候都可以被正確的刪除。特徵 scoped ptr的所有權不能轉讓。操作函式 scoped ptr的建構函式接受乙個型別為t 的指標p,建立出乙個s...

智慧型指標ScopedPtr

防拷貝的兩個條件 1 保護限定符 類外無法定義 2.顯示進行宣告 不進行宣告,系統將會自動生成預設的,是淺拷貝 這種方法簡單,粗暴。不讓使用拷貝構造和賦值運算子過載,你進行使用會編譯錯誤 如下 templateclass scopedptr scopedptr protected scopedptr...

Boost智慧型指標 scoped ptr

boost scoped ptr和std auto ptr非常類似,是乙個簡單的智慧型指標,它能夠保證在離開作用域後物件被自動釋放。下列 演示了該指標的基本應用 include include include class implementation void do something void t...