从函数返回多个auto_ptrs

时间:2009-07-30 14:12:21

标签: c++ auto-ptr

我有一个函数在堆上分配两个变量并将它们返回给调用者。像这样:

void Create1(Obj** obj1, Obj** obj2)
{
    *obj1 = new Obj;
    *obj2 = new Obj;
}

通常,在类似的情况下,当我有一个带有一个变量的函数时,我使用auto_ptr的“源”技巧:

auto_ptr<Obj> Create2()
{
    return new Obj;
}

我想使用Create1重写auto_ptr,但不知道该怎么做。据我所知,我不能通过引用返回auto_ptr,对吗?它有可能吗?

2 个答案:

答案 0 :(得分:4)

相关问题:Returning multiple values from a C++ function

我不希望在对或元组中使用auto_ptr时出现问题。返回包含几个auto_ptr成员的结构也应该有效。

答案 1 :(得分:4)

您可以通过调用std::auto_ptr方法指定reset

void f( std::auto_ptr<Obj>& pObj1, std::auto_ptr<Obj>& pObj2 )
{
    pObj1.reset( new Obj );
    pObj2.reset( new Obj );
}

reset调用将正确删除auto_ptr之前指向的内容。