c 智慧型指標

2021-06-25 09:39:35 字數 902 閱讀 2819

記得前不久有一次面試被問到智慧型指標的實現,當時對智慧型指標只是聽說但沒有了解過,就亂七八糟地說了一遍。今天寫了一遍智慧型指標,用了引用計數的概念。

主要思想就是,用乙個新類對原本需要的型別進行了一層封裝,這個新類中儲存了原本的物件指標和乙個引用計數的指標,之所以全部用指標來儲存,就是因為會出現多個新類的物件引用到同乙個指標,這樣的話當我們修改原本物件的內容以及引用計數時,就很天然性地保證了其他新類物件引用到的是最新的,同時,為了讓我們以為新類的物件也是個「指標」,過載一下新類的「->」,和"*"操作符。下面直接上**,不過其中用法還是有幾點注意。

#include #include #include #include class ctest

~ctest()

void print() };

templateclass smartpointer

smartpointer(const smartpointer& sp):ptr(sp.ptr), puse(sp.puse)

smartpointer& operator=(const smartpointer& sp)

const t* operator->()const

t* operator->()

const t& operator*() const

t& operator*()

~smartpointer()

private:

t* ptr;

size_t* puse;

void decuse() }

};int main()

上面**中原始型別就是ctest,這種智慧型指標的方法有乙個限制就是同乙個指標不能多次作為smartpointer的建構函式的引數,如同main函式中最後的三局是錯誤的用法。

c 智慧型指標

auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...

c 智慧型指標

很久沒寫部落格了,不知道如何表達了,哈哈.我先介紹一下深淺拷貝.class copy 此時a.ptr和b.ptr指向同乙個物件,當我們delete a.ptr時 b.ptr所指向的物件已經不存在了,要是我們引用b.ptr指向的物件也就會出問題了.深拷貝 把a.ptr所指向的物件拷貝乙份給b.ptr ...

C 智慧型指標

c 智慧型指標主要是在普通指標的基礎上封裝了一層,使得使用者對指標的使用更加方便和放心,在使用的過程中不用擔心指標因為釋放問題而導致的異常。在c 11中,智慧型指標主要有三種 shared ptrptr,unique ptrptr,weak ptrptr shared ptrptr的初始化可以通過以...