c++ 智慧型指標的模擬實現例項
1.引入
int main()
在上面的**中定義了乙個裸指標p,需要我們手動釋放。如果我們一不小心忘記釋放這個指標或者在釋放這個指標之前,發生一些異常,會造成嚴重的後果(記憶體洩露)。而智慧型指標也致力於解決這種問題,使程式設計師專注於指標的使用而把記憶體管理交給智慧型指標。
普通指標也容易出現指標懸掛問題,當有多個指標指向同乙個物件的時候,如果某乙個指標delete了這個物件,程式設計客棧所以這個指標不會對這個物件進行操作,那麼其他指向這個物件的指標呢?還在等待已經被刪除的基礎物件並隨時準備對它進行操作。於是懸垂指標就形成了,程式崩潰也「指日可待」。
int main()
~csmartptr()
t& operator*()
const t& operator*()const
t *operator->()
const t *operator->()const
private:
t *_ptr;
};int main()
模擬實現auto_ptr
template
class csmartptr
~csmartptr()
t& operator*()
const t& operator*()const
t *operator->()
const t *operator->()const
private:
t *_ptr;
bool owns; //標誌位 ,控制乙個資源的訪問許可權
};int main()
帶有引用計數的智慧型指標(方便對資源的管理和釋放)
class cheaptable
//增加引用計數
void addref(void *ptr)
}} //獲取引用計數的
int getref(void *ptr)
return 0;
}private:
cheaptable(){}
static cheaptable mheaptable;
struct node
bool operator==(const node &src)
void *mpaddr; //標識堆記憶體資源
int mcount; //標識資源的引用計數
};list mlist;
};cheaptable cheaptable::mheaptable;
template
class csmartptr
} ~csmartptr()
程式設計客棧
} csmartptr(const csmartptr &src)
:mptr(src.mptr)
}csmartptr& operator=(const csmartptr &src)
mptr = src.mptr;
if(mptr != null)
} t& operator*()
const t& operator*()const
t* operator->()
const t* operator->()const
void addref()
void delref()
int getref()
private:
t *mptr;
static cheaptable &mheaptable;
};template
cheaptable& csmartptr::mheaptable = cheaptable::getinstance();
模擬實現智慧型指標
智慧型指標可以用來管理資源,原自構造析構函式 raii 還可以像原生指標一樣使用。auto ptr 管理許可權的轉移。scoped ptr 防拷貝。shared ptr 引用計數解決auto ptr的缺陷。其中shared 自身帶有一定缺陷,迴圈引用,和不可釋放陣列類,檔案類等資源,幸運的是它支援定...
智慧型指標的模擬實現
1.引入 int main 在上面的 中定義了乙個裸指標p,需要我們手動釋放。如果我們一不小心忘記釋放這個指標或者在釋放這個指標之前,發生一些異常,會造成嚴重的後果 記憶體洩露 而智慧型指標也致力於解決這種問題,使程式設計師專注於指標的使用而把記憶體管理交給智慧型指標。普通指標也容易出現指標懸掛問題...
模擬實現智慧型指標SharedPtr
首先我們先來乙個小小的區分三個智慧型指標 1,autoptr 管理權的轉移 嚴重缺陷,盡量不要使用 2,scopedptr 簡單粗暴 防拷貝 只宣告不定義 3,sharedptr 共享,引用計數,功能強大,迴圈引用,但是較為複雜 下面我們來模擬實現一下sharedptr template t cla...