我想我可能需要做這樣的事情在我的應用程序下面的僞代碼:升壓shared_ptr的默認構造函數中使用
boost::shared_ptr<T> p;
...
...
p = boost::shared_ptr<T>(new T);
我知道有使用賦值運算符的其他選項,但我注意到在boost::shared_ptr
文檔/例子,他們從來沒有討論過這種涉及默認構造函數的情況。
我想我的問題是:這是有效的用途嗎?換句話說,它是否合法,是否會導致潛在的內存泄漏?欣賞任何想法/更正。非常感謝!
注意:我還記得閱讀,以及下面的一些評論表明,他們建議在調用構造函數new
時始終使用名爲shared_ptr
。不過,我很難想象這可能會造成任何傷害。如果你有他們,請張貼任何反例。謝謝!
這違反安全使用智能指針的#1規則:[「總是使用一個命名的智能指針變量來保存結果「(http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm)(代碼就像_appears_對我來說很安全,因爲'operator ='被指定爲非-throwing。然而,最好遵循這個最佳做法_所有的時間。這是很好的養成良好的習慣,它可以幫助你不必擔心你的代碼是否安全。) –
是的,我記得在文件..因此,這個問題。雖然似乎無傷大雅。這怎麼能打破任何東西? –
@ squashed.bugaboo:能夠打破任何東西,更多的是因爲地道和不令人驚訝。 – ildjarn