智慧型指標可以用來管理資源,原自構造析構函式(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....