智慧型指標的實現

2021-10-02 16:19:49 字數 1115 閱讀 1566

使用c++實現乙個智慧型指標,**如下:

template

<

class

t>

class

smartptr

}public

: size_t* countptr;

smartptr

(t* p)

smartptr

(const smartptr

&src)

smartptr

&operator=(

const smartptr

& src)

~smartptr()

t operator*(

) t*

operator

->()

};

需要注意的是為了使多個智慧型指標物件共享同一塊資料物件記憶體和物件引用計數,dataptr和countptr必須使用指標。

測試一下**:

#include

"pch.h"

#include

class

testclass

~testclass()

}};int

main()

結果如下:

ptr2的引用計數為: 1

testclass: destructor

ptr2的引用計數為: 2

ptr2的引用計數為: 1

請按任意鍵繼續. . .

smartptr: destructor

testclass: destructor

smartptr: destructor

testclass: destructor

smartptr: destructor

注意c++標準庫自帶的智慧型指標std::auto_ptr並不是使用引用計數方法實現的,它僅僅起到auto_ptr析構時釋放資料物件的功能,因此不能使兩個auto_ptr物件都指向同乙個資料物件,否則兩個auto_ptr物件析構時會釋放兩次資料物件。同理不能按值傳參auto_ptr物件,否則臨時物件拷貝會造成多個auto_ptr物件指向同一資料物件。

智慧型指標實現

namespace smart smart count 增加引用計數,並返回計數值.intaddref 減少引用計數,並返回計數值.intrelease private 計數變數.intuse count 智慧型指標.template class t class smart ptr 構造空指標.ex...

實現智慧型指標

資源的轉移不推薦使用。舊庫使用擁有者會導致野指標 實現 template class autoptr autoptr autoptr ap ptr ap.ptr autoptr operator autoptr ap return this autoptr t getptr const t getp...

智慧型指標的實現

pragma once includeusing namespace std 原理 資源的轉移 解決的問題 釋放指標 缺陷 如果乙個指標通過拷貝構造和賦值運算子過載將管理的空間交給其他指標,則原指標是沒有辦法訪問這塊空間了 if 0 templateclass autoptr autoptr aut...