//模板類作為友元時要先有聲明
template <typename T>
class SmartPtr;
template <typename T>
class U_Ptr //輔助類
{
private:
//該類成員訪問權限全部為private纳鼎,因為不想讓用戶直接使用該類
friend class SmartPtr<T>; //定義智能指針類為友元谓着,因為智能指針類需要直接操縱輔助類
//構造函數(shù)的參數(shù)為基礎對象的指針
U_Ptr(T *ptr) :p(ptr), count(1) { }
//析構函數(shù)
~U_Ptr() { delete p; }
//引用計數(shù)
int count;
//基礎對象指針
T *p;
};
template <typename T>
class SmartPtr //智能指針類
{
public:
SmartPtr(T *ptr) :rp(new U_Ptr<T>(ptr)) { } //構造函數(shù)
SmartPtr(const SmartPtr<T> &sp) :rp(sp.rp) { ++rp->count; } //復制構造函數(shù)
SmartPtr& operator=(const SmartPtr<T>& rhs) { //重載賦值操作符
++rhs.rp->count; //首先將右操作數(shù)引用計數(shù)加1咽斧,
if (--rp->count == 0) //然后將引用計數(shù)減1,可以應對自賦值
delete rp;
rp = rhs.rp;
return *this;
}
T & operator *() //重載*操作符
{
return *(rp->p);
}
T* operator ->() //重載->操作符
{
return rp->p;
}
~SmartPtr() { //析構函數(shù)
if (--rp->count == 0) //當引用計數(shù)減為0時夜涕,刪除輔助類對象指針拴事,從而刪除基礎對象
delete rp;
else
cout << "還有" << rp->count << "個指針指向基礎對象" << endl;
}
private:
U_Ptr<T> *rp; //輔助類對象指針
};
c++ 智能指針和引用計數(shù)
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钧敞,“玉大人蜡豹,你說我怎么就攤上這事「瓤粒” “怎么了镜廉?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長愚战。 經(jīng)常有香客問我娇唯,道長,這世上最難降的妖魔是什么寂玲? 我笑而不...
- 正文 為了忘掉前任塔插,我火速辦了婚禮,結果婚禮上拓哟,老公的妹妹穿的比我還像新娘佑淀。我一直安慰自己,他們只是感情好彰檬,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谎砾,像睡著了一般逢倍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上景图,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笛粘!你這毒婦竟也來了趁怔?” 一聲冷哼從身側響起湿硝,我...
- 正文 年R本政府宣布秉沼,位于F島的核電站桶雀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唬复。R本人自食惡果不足惜矗积,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敞咧。 院中可真熱鬧棘捣,春花似錦、人聲如沸休建。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽测砂。三九已至茵烈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砌些,已是汗流浹背呜投。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 在打平衡二叉樹時,看別人代碼用到了指針的引用,因為之前沒有用過我以為是他多此一舉,但是并不是.首先是函數(shù)傳遞指針 ...
- 自動引用計數(shù) 本書中以辦公室開關燈舉例: 假設辦公室的照明設備只有一個偎球。上班進入辦公室的人需要照明男图,所以要把燈打開...
- 聽說這本書很好示姿,所以在項目不怎么忙的時候就讀了讀⊙钒剩總結了點筆記栈戳。 手動內(nèi)存管理MRC 內(nèi)存管理的思想思想一:自己生...
- 1.自動引用計數(shù)在NSObject類的alloc類方法上設置斷點,追蹤程序的執(zhí)行。以下列出執(zhí)行所調(diào)用的方法和函數(shù)难裆。...