C++ 从一个函数返回多个自动\u ptr
我有一个函数,它在堆上分配两个变量,并将它们返回给调用者。大概是这样的:C++ 从一个函数返回多个自动\u ptr,c++,auto-ptr,C++,Auto Ptr,我有一个函数,它在堆上分配两个变量,并将它们返回给调用者。大概是这样的: void Create1(Obj** obj1, Obj** obj2) { *obj1 = new Obj; *obj2 = new Obj; } 通常,在类似的情况下,当我有一个带有一个变量的函数时,我会使用带有auto\u ptr的“源”技巧: auto_ptr<Obj> Create2() { return new Obj; } auto_ptr Create2() { 返回
void Create1(Obj** obj1, Obj** obj2)
{
*obj1 = new Obj;
*obj2 = new Obj;
}
通常,在类似的情况下,当我有一个带有一个变量的函数时,我会使用带有auto\u ptr
的“源”技巧:
auto_ptr<Obj> Create2()
{
return new Obj;
}
auto_ptr Create2()
{
返回新的Obj;
}
我想使用auto_ptr
重写Create1
,但不确定如何执行。据我所知,我无法通过引用返回auto_ptr,对吗?那么有可能吗?相关问题:
我不希望在成对或元组中使用auto_ptr时出现问题。返回一个包含两个auto_ptr成员的结构也应该可以工作。您可以通过调用其
重置
方法来分配给std::auto_ptr
:
void f( std::auto_ptr<Obj>& pObj1, std::auto_ptr<Obj>& pObj2 )
{
pObj1.reset( new Obj );
pObj2.reset( new Obj );
}
void f(标准::自动ptr&pObj1,标准::自动ptr&pObj2)
{
pObj1.重置(新Obj);
pObj2.重置(新Obj);
}
reset
调用将正确删除auto_ptr
之前指向的任何内容。这是一个选项。但如果可能的话,我不想使用pair和struct。如果您更喜欢返回参数,Timbo的答案应该是可行的。就我个人而言,我不喜欢返回参数,并尽可能避免返回参数。据我所知,调用方仍然是指针的“所有者”。看起来正是我需要的。我会尽快试一试。