2009-07-30 38 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