2009-07-30 128 views
2

我有一个函数可以在堆上分配两个变量并将它们返回给调用者。事情是这样的:从函数返回多个auto_ptrs

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

通常情况下,在类似的情况下,如果我有一个变量的函数我用的是“源”招用auto_ptr

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

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

回答

4

你可以通过调用其reset方法分配给std::auto_ptr

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

reset通话将正确删除无论auto_ptr指着面前。

4

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

一对或元组使用auto_ptr的问题,我不会期望。返回包含几个auto_ptr成员的结构也应该工作。

+0

这是一个选项。但是,如果可以的话,我宁愿不使用对和结构。 – FireAphis 2009-07-30 14:23:31

+1

如果你喜欢返回参数,Timbo的答案应该可以工作。就我个人而言,我不喜欢返回参数,并尽可能避免。 – 2009-07-30 14:27:18