C++ à l'aide de scoped_ptr comme une variable membre

Voulais juste des avis sur une question de conception. Si vous avez une classe C++ que possède d'autres objets, seriez-vous d'utiliser des pointeurs intelligents pour y parvenir?

class Example {
public: 
  //...

private:
  boost::scoped_ptr<Owned> data;
};

La "Propriété" de l'objet ne peut pas être stockée en valeur car il peut changer à travers la durée de vie de l'objet.

Mon point de vue, c'est que d'un côté, vous faites, il est clair que l'objet est la propriété et de s'assurer de sa suppression, mais sur le revers de la médaille, vous peut facilement avoir un pointeur normal et delete dans le destructeur. Est-ce exagéré?

Suivi: voulais Juste dire merci pour toutes vos réponses. Merci pour le heads-up sur auto_ptr laissant l'autre objet avec un pointeur NULL lorsque l'ensemble de l'objet est copié, j'ai utilisé auto_ptr approfondie, mais n'avait pas pensé à ça pour l'instant. Je fais essentiellement toutes mes classes, boost::noncopyable à moins que j'ai une bonne raison, donc il n'y a rien à craindre à ce sujet là. Et merci aussi pour les informations sur les fuites de mémoire dans les exceptions, c'est bon à savoir aussi. J'essaie de ne pas écrire des choses qui pourraient causer des exceptions dans le constructeur de toute façon - il y a de meilleures façons de le faire -, de sorte que ne devrait pas être un problème.

J'ai juste eu une autre question si. Ce que je voulais quand j'ai posé cette question était de savoir si quelqu'un fait cela, et vous semblez tous oublier que c'est une bonne idée en théorie, mais personne ne dit qu'ils sont amenés à le faire. Ce qui me surprend! Certainement un objet de la possession d'un pointeur à un autre n'est pas une idée nouvelle, je me serais attendu à vous tous l'aurait fait avant, à un certain point. Ce qui se passe?

  • "J'essaie de ne pas écrire des choses qui pourraient causer des exceptions dans le constructeur de toute façon - il y a de meilleures façons de le faire" - j'ai un problème avec cette déclaration. Souvent, la levée d'une exception à partir d'un constructeur est le meilleur moyen d'indiquer qu'une classe ne peut pas être construit.
InformationsquelleAutor Ray Hidayat | 2009-02-01