Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从一个函数返回多个自动\u ptr_C++_Auto Ptr - Fatal编程技术网

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的答案应该是可行的。就我个人而言,我不喜欢返回参数,并尽可能避免返回参数。据我所知,调用方仍然是指针的“所有者”。看起来正是我需要的。我会尽快试一试。