智慧型指標就這麼簡單

2021-10-07 08:16:59 字數 1904 閱讀 7426

自己實現乙個智慧型指標

自己實現shared_ptr

拷貝建構函式

賦值函式

class a 

~a() {}

private:

int a;

};

現已廢棄。

缺點1:多個指標不能指向同乙個,以下**執行時會報錯。

a *a = new a(1);

auto_ptrap1(a);

auto_ptrap2(a);

缺點2:不能指向陣列,以下**會報錯

auto_ptrap (new int[5]);
缺點3:沒有拷貝建構函式。auto_ptr之間不能相互賦值。

獨佔只能乙個指標指向乙個

可以指向陣列,下面**是正確的。

unique_ptrup (new int[5]);
指標間相互賦值必須使用move

a *a = new a(1);

unique_ptrap1(a);

unique_ptrap2=move(ap1);

cout << ap2->a << endl;

可以多個指標共享乙個物件

指標之間可以相互賦值

引入了引用計數

a *a = new a(1);

shared_ptrap1(a);

shared_ptrap2=ap1;

cout << ap2.use_count() << endl;

輸出了ap2的引用計數為2個

weak_ptr的引用計數真實反映了shared_ptr的引用計數。

給他賦值之後不用導致引用計數加一

a *a = new a(1);

shared_ptrap1(a);

shared_ptrap2=ap1;

weak_ptrwp = ap1;

cout << wp.use_count() << endl;

templateclass smartptr{};
乙個是t型別的指標

template class smartptr ;
template class smartptr ;
template class smartptr ;
實現上面這些就實現了乙個普通的auto_ptr了。

如果想要實現shared_ptr,增加引用計數的成員變數。

template class smartptr ;
templatesmartptr::smartptr(t*p)
當引用計數為0的時候,銷毀記憶體

void decref()

}

templatesmartptr::~smartptr()
兩個指向同一塊記憶體,並且引用計數加一

templatesmartptr::smartptr(const smartptr& src)
右值引用計數加一

左值引用計數減一

讓兩個指向同一塊記憶體

templatesmartptr& smartptr::operator=(const smartptr& rhs)

ERP就這麼簡單

訂貨意向 妻子 當然可以,來幾個人,幾點來,想吃什麼菜?丈夫 6個人,我們7點左右回來,準備些酒 烤鴨 番茄炒蛋 冷盤 蛋花湯。你 看可以嗎?商務溝通 妻子 沒問題,我會準備好的,訂單確認 妻子記錄下需要做的選單 mps計畫 具體要準備的菜 鴨 酒 番茄 雞蛋 作 油。bom物料清單 發現需要 1只...

智慧型指標(簡單版)

include 智慧型指標,物件導向的指標。該指標可以實現自動 記憶體的功能。通過將指標交給物件來管理,物件放到棧中,棧由系統進行管理,來實現自動 功能,獨闢蹊徑,妙啊。實現該智慧型指標的主要問題在於運算子的過載上。template class smartptr smartptr t operato...

氣泡排序就這麼簡單

在我大一的時候自學c語言和資料結構,我當時就接觸到了氣泡排序 當時使用的是c語言編寫的 現在大三了,想要在暑假找到乙份實習的工作,又要回顧一下資料結構與演算法的知識點了。排序對我們來說是一點也不陌生了,當你打王者榮耀的時候也會有段位之分,當你打dota的時候也有天梯分。從高往下數,這個排名是有規律的...