nda*_*son 6 c++ unique-ptr c++11
我正在更新一些pre c ++ 11代码以使用c ++ 11 unique_ptrs.
我不确定如何处理的一件事是旧代码使用指针赋值作为条件.例如
Object* obj;
while ( obj = C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() )
{
// do something with obj
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
鉴于std :: unique_ptr :: reset没有返回值,因此无法将其直接转换为:
std::unique_ptr< Object > obj;
while ( obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() ) )
{
// do something with obj
}
Run Code Online (Sandbox Code Playgroud)
那么,升级此代码以使用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() );
}
Run Code Online (Sandbox Code Playgroud)
但这增加了对库函数的混乱双重调用,理想情况下我想避免.
怎么样:
while ( auto obj = std::unique_ptr<Object>( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() ) )
{
// do something with obj
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |