下面是一個(gè)智能指針使用的例子(以下的內(nèi)容僅僅針對(duì)std::shared_ptr這一個(gè)智能指針)
先說(shuō)幾個(gè)問(wèn)題口糕,shared_ptr的智能指針會(huì)存在循環(huán)引用的問(wèn)題,這個(gè)問(wèn)題在開發(fā)的時(shí)候需要注意差牛。這里我想說(shuō)我使用智能指針的一個(gè)初衷。
從例子可以看出堰乔,我使用容器vector偏化,C++比C的優(yōu)勢(shì)處在于,C++的標(biāo)準(zhǔn)庫(kù)提供了大量的容器和算法镐侯,但是侦讨,容器的使用上面,我們的建議是不要存留大對(duì)象(泛指拷貝構(gòu)造函數(shù)龐大的類)苟翻,原因就不多解釋了韵卤,大對(duì)象的考慮和副本生成是非常耗費(fèi)時(shí)間的,為了解決這個(gè)問(wèn)題崇猫,我們采用對(duì)象的指針沈条,這樣容器中就可以存入這些對(duì)象的指針,易于我們的操作邓尤!
引入指針以后拍鲤,我們面臨一個(gè)問(wèn)題贴谎,就是內(nèi)存釋放的問(wèn)題汞扎,我們必須小心處理這個(gè)問(wèn)題,否則很容易出現(xiàn)內(nèi)存泄漏的問(wèn)題擅这。
這里使用share_ptr的原因就是為了規(guī)避這個(gè)內(nèi)存管理的問(wèn)題澈魄,可以從例子很容易看出,我們并沒(méi)有太多的關(guān)系這個(gè)對(duì)象的釋放問(wèn)題仲翎。不過(guò)痹扇,如何將一個(gè)堆上的指針?lè)庋b到一個(gè)智能指針的對(duì)象也是一個(gè)問(wèn)題铛漓,這里使用了std::make_shared解決這個(gè)問(wèn)題,
但是對(duì)于很多其他的使用new的方式生成的指針鲫构,我們可以使用對(duì)象的方式進(jìn)行賦值
另外對(duì)于智能指針對(duì)象還提供了reset函數(shù)用來(lái)重置所封裝的指針浓恶。