智慧型指標的延伸 兩種定製刪除器的實現方法

2021-07-12 04:01:23 字數 1732 閱讀 6754

所謂定製刪除器,就是向目標模板提供乙個可以自由選擇析構的介面,這樣做的好處就是可以使智慧型指標模板不再只能單獨管理記憶體,我們還可以用它管理檔案指標之類的東西。其實現方法有兩種,這裡我們以share指標為例。

1.傳遞乙個類的模板引數並給出預設值,模板中將該類設定為成員變數,通過該類(刪除類)的例項化,呼叫類中所存的刪除方法進行刪除。

**如下:

#includetemplate struct del

}};struct free

};struct close

};template>

class sharedptr

sharedptr(t* ptr, deleter del)

:_ptr(ptr)

, _pcount(new long(1))

, _del(del)

{} ~sharedptr()

sharedptr(const sharedptr& sp)

:_ptr(sp._ptr)

, _pcount(sp._pcount)

//sharedptr& operator=(const sharedptr& sp)//傳統寫法

// // return *this;

//}sharedptr& operator=(sharedptrsp)

t& operator*()

t* operator->()

t* getptr()

long getcount()

protected:

void _release() }

protected:

t* _ptr;

long* _pcount;

deleter _del;

};

測試用例如下:

void test2()

2.在智慧型指標的模板中,新增函式指標變數,通過建構函式確定所傳遞的函式指標,用該指標所指向的方法進行刪除。

**如下:

void free()

void del()

void close()

templateclass sharedptr

sharedptr(t* ptr, void(*p)())

:_ptr(ptr)

, _pcount(new long(1))

, del(p)

~sharedptr()

sharedptr(const sharedptr& sp)

:_ptr(sp._ptr)

, _pcount(sp._pcount)

sharedptr& operator=(sharedptrsp)

t& operator*()

t* operator->()

t* getptr()

long getcount()

protected:

void _release() }

protected:

t* _ptr;

long* _pcount;

void(*del)();

};

測試用例如下:

void test1()

本文出自 「pawnsir的it之路」 部落格,請務必保留此出處

兩種智慧型指標 RAII智慧型指標和引用計數智慧型指標

raii的全稱是 resource acquisition is initialization 也就是 資源獲取就是初始化 就像記憶體分配是在變數初始化的時候分配的 比如,當程式結束時,系統會自動釋放程式所使用的資源 函式傳值時,當函式呼叫結束,該值也將消亡。include define safe ...

智慧型指標的簡單實現及兩種誤用方式

最近在自己寫智慧型指標的時候,遇到了一些小的疑惑,也糾正了之前的一些理解上的偏差。首先是最簡單的智慧型指標的乙個實現 templateclass smartpointer 建構函式 t operator t operator smartpointer 這與auto ptr類似,可以完成自動釋放記憶體...

stl的四種智慧型指標

第一種 std auto ptr auto ptr是所有權轉移的智慧型指標,也就是同一時刻只有乙個智慧型指標物件對原物件擁有所有權。第二種 std scoped ptr scoped ptr智慧型指標無法使用乙個物件建立另乙個物件,也無法採用賦值的形式。這無疑提公升了智慧型指標的安全性,但是又存在無...