模擬實現智慧型指標

2021-07-30 16:47:16 字數 1706 閱讀 1710

智慧型指標可以用來管理資源,原自構造析構函式(raii);還可以像原生指標一樣使用。

auto_ptr:管理許可權的轉移。

scoped_ptr: 防拷貝。

shared_ptr:引用計數解決auto_ptr的缺陷。

其中shared 自身帶有一定缺陷,迴圈引用,和不可釋放陣列類,檔案類等資源,幸運的是它支援定製刪除器,以及使用weak_ptr

關於資源管理: 有興趣可以看看,以下為上述智慧型指標實現**。

auto_ptr:(測試**沒貼,建議可從基本型別,和自定義型別著手)

templateclass autoptr

autoptr(autoptr& ap)

:_ptr(ap._ptr) //管理許可權轉移

autoptr& operator=(autoptr& ap)

return *this;

} t& operator*()

t* operator->()

~autoptr() }

private:

t* _ptr;

};class testclass

public:

int _a;

};

scoped_ptr

:

templateclass scopedptr

t& operator*()

t* operator->()

~scopedptr() }

protected:

//禁止拷貝

//用以解決釋放非基本型別

//以陣列為例

templatestruct deletearry

};//解決迴圈引用,見上圖。

template class weak_ptr

};templateclass sharedptr

sharedptr(sharedptr& sp)

:_ptr(sp._ptr)

, _count(sp._count)

sharedptr& operator=(sharedptr& sp)

_ptr = sp._ptr;

_count = sp._count;

(*_count)++;

} return *this;

} t& operator*()

t* operator->()

~sharedptr()

_ptr = null;

_count = null;

} }private:

t* _ptr;

int* _count;

};

模擬實現智慧型指標SharedPtr

首先我們先來乙個小小的區分三個智慧型指標 1,autoptr 管理權的轉移 嚴重缺陷,盡量不要使用 2,scopedptr 簡單粗暴 防拷貝 只宣告不定義 3,sharedptr 共享,引用計數,功能強大,迴圈引用,但是較為複雜 下面我們來模擬實現一下sharedptr template t cla...

智慧型指標的模擬實現

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

模擬實現boost庫里的智慧型指標

include include using namespace std 模擬實現auto ptr,非常坑爹什麼情況下都不要使用 template class auto ptr auto ptr auto ptr a 拷貝建構函式 auto ptr operator auto ptr a ptr a....