scoped_ptr是乙個類似auto_ptr的智慧型指標,scoped_ptr可以保證new操作符在堆上建立的物件在任何時候都可以被正確的刪除。
scoped_ptr的最大特點就是一旦scoped_ptr擁有了某個物件的所有權,就無法再次取回!
scoped_ptr的建構函式:
scoped_ptr(t *p=0):px(p)
//其接受t*型別的指標p,建立出物件,並在該物件內部儲存指標引數p,此處p必須是乙個new動態分配的結果,或者是乙個空指標
scoped_ptr的析構函式:
~scoped_ptr()
//物件的生命週期結束後,析構函式呼叫delete自動銷毀所儲存的物件
scoped_ptr為了保證被其管理的指標的所有權不被轉移,就將其拷貝構造和賦值函式設定為私有的:
private:
t *px;
scoped_ptr(scoped_ptr cosnt &);
scoped_ptr& operator=(scoped_ptr const &);
scoped_ptr的成員函式reset():重置scoped_ptr,刪除原來儲存的指標,再儲存新的指標,若新指標為空,則scoped_ptr將不持有任何指標:
void reset(t *p = 0)
void swap(scoped_ptr &b) //交換兩個scoped_ptr儲存的指標
scoped_ptr不支援比較操作,不能判斷兩個指標的相等或不相等,因為其operator== 和 operator!= 操作被宣告為私有的:
private:
void
operator==(scoped_ptr const &)const;
void
operator!=(scoped_ptr const &)const;
scoped_ptr的成員函式get():得到scoped_ptr內部儲存的指標,不可對該指標進行delete操作,否則會在scoped_ptr析構時會對已經刪除的指標再進行刪除操作:
t *get()const
注意:
scoped_ptr不再需要delete操作scoped_ptr會自動釋放資源
以下是我對scoped_ptr的測試:
#include
#include
#include
using
namespace
std;
using
namespace boost;
//scoped_ptr不需要delete操作,因其會自動釋放資源
//scoped_ptr不能進行拷貝構造,所以不能執行scoped_ptrps = p;(錯誤)
int main()
智慧型指標 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...