在语句内,编译器拥有自由度,容易泄露资源,
processwidget (std::tr1::shared_ptr<Widget>(new widget), priority ()) ;
在对processwidget
的调用过程中可能引发资源泄漏,因为在“资源被创建(经由“new widget
")”和“资源被转换为资源管理对象”两个时间点之间有可能发生异常干扰。
解决办法:使用分离语句。
(1)创建widge;
(2)将它置入一个智能指针内,然后再把那个智能指针传给processwidget
:
std