智慧型指標實現

2021-06-16 17:31:38 字數 2103 閱讀 8161

namespace

smart ~

smart_count

(){}

// 增加引用計數, 並返回計數值.

intaddref

() // 減少引用計數, 並返回計數值.

intrelease()

private:

// 計數變數.

intuse_count

; };

// 智慧型指標.

template

<

class

t>

class

smart_ptr

// 構造空指標.

explicit

smart_ptr():

p(null),u

(null

) {}

// 智慧型指標析構.

~smart_ptr

(void)

} // 智慧型指標拷貝建構函式.

smart_ptr

(const

smart_ptr

<

t>&t)

}// 指標賦值.

smart_ptr

<

t>&

operator=(

smart_ptr

<

t>&t)

t*temp_p=p

; smart_count

*temp_u=u

; // 直接賦值. p=

t.p;

u=t.

u; if

(temp_p

&&temp_u

->

release

()<=0)

// 返回當前smart_ptr指標.

return

*this; }

// 過載->操作和*操作符. t*

operator

->

(void) t

&operator*(

void

) // 過載!操作符.

bool

operator!()

const

// 過載指標bool值操作符.

typedef

smart_ptr

<

t>

this_type

; typedeft*

this_type

::*unspecified_bool_type

; operator

unspecified_bool_type

()const

// 得到原指標. t*

get()

void

reset(t

*ptr)

} void

reset

(smart_ptr

<

t>&t)

t*temp_p=p

; smart_count

*temp_u=u

; // 賦值. p=

t.p;

u=t.

u; if

(temp_p

&&temp_u

->

release

()<=0)

}private: t*

p;smart_count*u

; };

// 過載==操作符.

template

<

classt,

class

u>

inline

bool

operator==(

smart_ptr

<

t>&a

,smart_ptr

<

u>&b

) // 過載!=操作符.

template

<

classt,

class

u>

inline

bool

operator!=(

smart_ptr

<

t>&a

,smart_ptr

<

u>&b

) }

實現智慧型指標

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

C 智慧型指標實現

1 問題的提出 先看下面的例子 class ctext ctext private int m ptr int funtext 在函式funtext 中,類的兩個物件共用了new出來的指標ptr。當函式執行開始時,呼叫兩次建構函式 退出執行時,呼叫兩次析構函式,而在第一次呼叫時已經delete pt...

智慧型指標的實現

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