C unique ptr的模擬實現

2021-10-06 10:34:32 字數 958 閱讀 4362

一、unique_ptr的模擬實現

在之前的部落格中,我說過auto_ptr的缺陷,所以為了避免auto_ptr的缺陷,所以unique_ptr用了乙個簡單粗暴的辦法:防拷貝、防賦值。既然auto_ptr在拷貝和賦值的時候,會出現一些問題,那麼在unique_ptr中就不讓他進行拷貝和賦值。

那麼如何禁止它拷貝和賦值呢?

我們都知道,如果我們沒有定義拷貝構造和賦值運算子過載函式時,編譯器會為其生成預設的拷貝構造和賦值運算子過載。所以我們可以用下面兩種辦法來實現禁止拷貝和賦值。

方法一:在c++98中

將拷貝構造和賦值運算子過載宣告為私有成員並且只宣告不定義。但是這又乙個缺陷,那就是可以通過友元函式來訪問。

方法二:在c++11中

在函式宣告後面加上「=delete」,來顯式的禁用掉該函式

templateclass unique_ptr

unique_ptr()

t& operator*()

t* operator->()

private:

t * ptr;

//c++98中

unique_ptr(uniqueptrconst &);

unique_ptr & operator=(uniqueptrconst &);

//c++11中

unique_ptr(unique_ptrconst& up)=delete;

unique_ptr& operator=(unique_ptrconst& up)=delete;

};

vector的模擬實現

上一節部落格講述了vector常見介面的使用,今天主要是對vector這些介面進行模擬實現,下面是相關 include include includeusing namespace std namespace ty iterator end citerator cbegin const citera...

list的模擬實現

list是stl標準模板庫中的乙個容器,它實質上是乙個帶頭雙向迴圈鍊錶。這樣的好處是 插入 刪除資料時,不用判斷鍊錶是否為空,並且遍歷的時候找尾也很容易,只需要用 head prev就能實現。迭代器的作用就是為了讓容器的訪問像指標一樣可以實現 解引用,以及過載 的比較符。迭代器有兩種實現方式 1.原...

bind的模擬實現

var context context window var result 判斷是否有第二個引數 if arguments 1 else delete context.fn return result var foo function bar name,age bind 方法會建立乙個新的函式。當這...