2009-07-30 9 views
2

J'ai une fonction qui alloue deux variables sur le tas et les renvoie à l'appelant. Quelque chose comme ceci:Renvoyer plusieurs auto_ptrs à partir d'une fonction

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

Habituellement, dans des cas similaires, quand j'ai une fonction avec une variable-je utiliser la « source » truc avec auto_ptr:

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

Je voudrais réécrire Create1 en utilisant auto_ptr mais je ne sais pas comment le faire. Pour autant que je comprenne je ne peux pas renvoyer auto_ptr par référence, ai-je raison? Alors est-ce possible?

Répondre

4

Vous pouvez attribuer à un std::auto_ptr en appelant sa méthode reset:

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

L'appel reset sera correctement quel que soit le supprimer auto_ptr pointait auparavant.

+0

Si je comprends bien l'appelant restera le "propriétaire" des pointeurs. Regarde exactement ce dont j'ai besoin. Je vais l'essayer rapidement. – FireAphis

4

question connexe: Returning multiple values from a C++ function

je n'attendre à des problèmes en utilisant auto_ptr dans une paire ou tuple. Renvoyer une structure contenant un couple de membres auto_ptr devrait aussi fonctionner.

+0

C'est une option. Mais je préférerais ne pas utiliser de paires et de structures si je le pouvais. – FireAphis

+1

La réponse de Timbo devrait fonctionner si vous préférez les paramètres de retour. Personnellement, je n'aime pas les paramètres de retour et d'éviter ensuite autant que possible. –

Questions connexes