2009-07-30 27 views
2

Ich habe eine Funktion, die zwei Variablen im Heap reserviert und sie an den Aufrufer zurückgibt. Etwas wie folgt aus:Rückgabe von mehreren auto_ptrs aus einer Funktion

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

Regel in ähnlichen Fällen, wenn ich eine Funktion mit einer Variablen habe ich verwenden, um die „Quelle“ Trick mit auto_ptr:

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

Ich möchte Create1 umschreiben auto_ptr mit aber nicht sicher, wie es geht. Soweit ich verstehe, kann ich auto_ptr nicht als Referenz zurückgeben, habe ich recht? So ist es überhaupt möglich?

Antwort

4

Sie können durch den Aufruf seiner reset Methode zu einem std::auto_ptr zuordnen:

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

Der reset Anruf wird richtig löschen, was auch immer die auto_ptr, bevor zeigte.

+0

Wie ich verstehe, wird der Anrufer der "Besitzer" der Zeiger bleiben. Sieht genau das aus, was ich brauche. Ich werde es sofort versuchen. – FireAphis

4

Verwandte Frage: Returning multiple values from a C++ function

würde ich nicht erwarten, dass Probleme in einem Paar oder Tupel mit auto_ptr. Das Zurückgeben einer Struktur, die einige auto_ptr-Member enthält, sollte ebenfalls funktionieren.

+0

Es ist eine Option. Aber ich würde es vorziehen, keine Paare und Strukturen zu verwenden, wenn ich könnte. – FireAphis

+1

Timbos Antwort sollte funktionieren, wenn Sie Rückgabeparameter bevorzugen. Persönlich mag ich Rückkehrparameter nicht und vermeide dann wann immer möglich. –

Verwandte Themen