2010-09-01 5 views
1

pointeurs communs vous permet de créer pointeur vers pointeur:pointeurs partagés: pointeur vers pointeur

void foo(Object **o) {} 

int main() 
{ 
    Object * o = new Object(); 
    foo(&o); 
} 

Y at-il une construction analogue pour shared_ptr?

void foo(std::shared_ptr <Object> *o) {} 

int main() 
{ 
    std::shared_ptr <Object> o(new Object()); 
    foo(&o); 
} 
+0

Qu'essayez-vous d'accomplir? À moins que vous ayez une raison spéciale de ne pas le faire, il est plus facile de simplement retourner un objet par valeur ou au moins une propriété transférant un pointeur intelligent par valeur.Avec un pointeur vers un pointeur ou un pointeur vers un pointeur intelligent afin de pointer vers un pointeur dynamique L'objet ocate n'est généralement pas nécessaire en C++. –

Répondre

2

Sans ce test, je suis sûr que vous voulez:

shared_ptr<shared_ptr<T> > o(new shared_ptr<T>(new T())); 

Edit: a oublié la "nouvelle" après la première '(', et fixe l'utilisation non standard> > dans une définition de modèle (au moins, pas standard jusqu'à C++ 0x)

+0

Et bien sûr, la signature de foo() serait: void foo (std :: shared_ptr > o); –

+0

Sûrement il cherche quelque chose de plus simple tel que le paramètre: 'shared_ptr * p' et l'implémentation' p-> reset (new T) '. Même si cela me semble maladroit. –

Questions connexes