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