在条件或循环中分配智能指针
Assign smart pointer in condition or loop
我正在更新一些 c++11 之前的代码以使用 c++11 unique_ptrs。
我不确定如何处理的一件事是旧代码何时使用指针赋值作为条件。 例如
Object* obj;
while ( obj = C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() )
{
// do something with obj
delete obj;
}
鉴于 std::unique_ptr::reset 没有返回值,因此无法将其直接转换为:
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 ( auto obj = std::unique_ptr<Object>( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() ) )
{
// do something with obj
}
如果要
在循环外保持obj
活动状态,可以使用逗号运算符:
std::unique_ptr< Object > obj;
while ( obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT() ), obj )
{
// do something with obj
}
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 从堆栈分配的原始指针构造智能指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- C++:矢量分配器行为、内存分配和智能指针
- 哪些资源是由智能指针管理的,而它们的内存不是由new分配的
- 如何检查C++智能指针内存分配是否成功?
- 好的设计?用于分配的智能指针与用于访问的原始指针相结合
- 为什么将智能指针重新分配给自身会导致破坏?
- 在条件或循环中分配智能指针
- 正在使用::New()在堆或堆栈上分配智能指针
- 如何删除用于动态分配对象的智能指针
- 智能感知:不能将 "void" 类型的值分配给类型 "double" 的实体
- 使用智能指针时,是否有必要阻止分配运算符和复制构造函数
- CComPtrBase::~解除分配智能指针时,CComPtr Base崩溃
- 使用智能指针解除内存分配
- 将现有值分配给智能ptr
- 重新分配智能指针
- 在C++中使用智能指针分配和删除内存的有效方法
- C++——智能指针和自定义内存分配困境
- 智能指针和参数列表分配规则