智慧型指標的實現

2021-10-22 06:55:42 字數 1465 閱讀 8043

1.智慧型指標:自己決定資源的釋放

使用類來模擬智慧型指標,且用起來像指標

#include

#include

using

namespace std;

//智慧型指標

classcs;

void

test()

};classsp~

sp() cs*

operator

->()

//operator作類的轉換函式 -> 變為cs指標

cs&operator*(

)//operator作類的轉換函式 *返回cs引用

operator

bool()

//過載多個operator使得該類用起來像指標

//拷貝問題:1.不允許=運算子 cs& operator=(cs&)=delete;

// 2.使用移動拷貝,auto_ptr 98

//sp& operator=(sp& obj)

///*3.結合前面的引用計數和寫實拷貝 新的智慧型指標寫法*/

private

: cs* m;

//將資源放入智慧型指標類中管理起來};

intmain()

//operator過載

//sp a2=a1;//a1無了(2.移動拷貝)

return0;

}

2.完善** 加入引用計數和模板類 使得智慧型指標通用

classcs;

void

test()

private

:char

* m_p;

int m_n***;};

classct}

;//測試模板

template

<

typename t>

classsp;

//引用計數器

template

<

typename t>

classrc~

rc()void

add(

)void

release()

};//智慧型指標類// 新增模板

template

<

typename t>

class

spsp

(t* p)~sp

()//拷貝構造

sp(sp& obj)

//運算子過載

sp &

operator

=(sp& obj)

void

test2()

t*operator

->()

t**operator&(

) t&

operator*(

)operator t*()

};intmain()

智慧型指標實現

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