之前寫了一篇部落格是關於智慧型指標的「發展歷史」和核心。部落格可戳 ->
但其實內容講的還是有些泛了,不如自己動手理解來得真切。
那今天,就來用自己的方法來實現一下智慧型指標的功能吧: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.採用這種方式,物件所需的資源在生命週期內始終有效 舉個例子 丟...