我有一个函数在堆上分配两个变量并将它们返回给调用者。像这样:
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,对吗?它有可能吗?
答案 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
之前指向的内容。