我正在更新一些pre-C++ 11代碼以使用C++ 11 unique_ptrs。在條件或循環中分配智能指針
我不確定如何處理的一件事是舊代碼使用指針分配作爲條件。例如。
Object* obj;
while (obj = C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT())
{
// do something with obj
delete obj;
}
鑑於性病::的unique_ptr ::重置沒有返回值,它不可能直接轉化這:
std::unique_ptr<Object> obj;
while (obj.reset(C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT()))
{
// do something with obj
}
那麼,什麼是升級該代碼使用unique_ptrs最徹底的方法?我能想出的最好的是:
std::unique_ptr<Object> obj;
obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT());
while (obj)
{
// do something with obj
obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT());
}
但是,增加了庫函數,在理想情況下,我想,以避免雜亂的人通話。
,它允許: 'while(obj.reset(LIBRARY_CALL()); obj)' – aschepler
@aschepler:現在是什麼? –
'C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT'你刪除了嗎?那是可疑的。 – StoryTeller