C 智慧型指標的模擬實現及使用

2021-08-08 16:46:54 字數 1754 閱讀 4765

之前寫了一篇部落格是關於智慧型指標的「發展歷史」和核心。

部落格可戳 ->

但其實內容講的還是有些泛了,不如自己動手理解來得真切。

那今天,就來用自己的方法來實現一下智慧型指標的功能吧:d

scopedptr(const scopedptr&s);//禁止使用拷貝建構函式

scopedptr& operator=(scopedptr& s);//禁止賦值構造

private:

a* _ptr;

};

template

b>

class

sharedptr

~sharedptr

()

}sharedptr(sharedptr

& s)

:_ptr(s._ptr)

, _count(s._count)

sharedptr

& operator=(scopedptr

& s)

_ptr(s._ptr);

_count(s._count);

(*count)++:

}return *this;

}b& operator*()

b* operator->()

int getcount

()

b* getptr

()const

private:

int* _count;//引用計數

模擬實現智慧型指標

智慧型指標可以用來管理資源,原自構造析構函式 raii 還可以像原生指標一樣使用。auto ptr 管理許可權的轉移。scoped ptr 防拷貝。shared ptr 引用計數解決auto ptr的缺陷。其中shared 自身帶有一定缺陷,迴圈引用,和不可釋放陣列類,檔案類等資源,幸運的是它支援定...

智慧型指標的模擬實現

1.引入 int main 在上面的 中定義了乙個裸指標p,需要我們手動釋放。如果我們一不小心忘記釋放這個指標或者在釋放這個指標之前,發生一些異常,會造成嚴重的後果 記憶體洩露 而智慧型指標也致力於解決這種問題,使程式設計師專注於指標的使用而把記憶體管理交給智慧型指標。普通指標也容易出現指標懸掛問題...

智慧型指標的使用和模擬實現

1.1rall rall 是一種利用物件生命週期來控制程式資源的簡單技術 在物件構造的時候獲取資源,接著控制對資源的訪問之在物件生命週期期間內始終保持有效,最後在物件析構的時候釋放資源,這樣做的好處有兩個 1.不需要顯示的釋放記憶體 2.採用這種方式,物件所需的資源在生命週期內始終有效 舉個例子 丟...