C 智慧型指標的模擬實現例項

2022-10-04 00:48:14 字數 1815 閱讀 1625

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...