智慧型指標之scoped ptr

2021-07-11 18:22:38 字數 1566 閱讀 1223

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...