1. 可能會出現(xiàn)資源泄漏的一種用法
假設(shè)我們有一個(gè)獲取進(jìn)程優(yōu)先權(quán)的函數(shù),還有一個(gè)在動(dòng)態(tài)分類的Widget對象上根據(jù)進(jìn)程優(yōu)先權(quán)進(jìn)行一些操作的函數(shù):
1 int priority();2 3 void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);
注意這里使用了對象管理資源的用法(Item 13),processWidget為它需要處理的動(dòng)態(tài)分配對象Widget使用了智能指針(tr1::shared_ptr)。
現(xiàn)在考慮對processWidget函數(shù)的調(diào)用:
1 processWidget(new Widget, priority());
這個(gè)函數(shù)調(diào)用不能通過編譯,因?yàn)樵趖r1::shared_ptr構(gòu)造函數(shù)中顯示的使用了一個(gè)原生指針,而不能將“new Widget”返回的原生指針直接隱式轉(zhuǎn)換為tr1::shared_ptr。下面的代碼將會通過編譯:
1 processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());