smart pointer et attribut de classe
Bonjour,
Je débute avec l'utilisation des smart pointers et je bute sur plusieurs petits cas pratique.
Tout d'abord j'ai une classe abstraite A qui contient un objet B. J'aimerais utiliser les smart pointers pour définir cette composition, mais pour arriver à compiler il faut que j'écrive:
Code:
1 2 3 4 5 6 7 8 9 10
| class A {
private:
boost::scoped_ptr<B> b_;
public:
/// constructor1
A(B* b) : b_(b) {}
} |
au lieu de
Code:
1 2 3 4 5
| /// constructor 2
A(boost::scoped_ptr<B> b) : b_(b) {}
/// constructor 3
A(B) : b_(b) {} |
Et je ne comprends pas bien pourquoi.
Ensuite j'avoue que je ne comprends pas bien quand il faut utiliser les shared_ptr plutôt que les scoped_ptr (j'ai lu le tutoriel de L.Joly sur le sujet, mais il mentionne que très sommairement les scoped_ptr). Par défaut j'utilise les scoped_ptr pour les objets seul, et les shared_ptr pour les collections (std::vector<shared_ptr<B> >)
D'avance merci de vos conseils.