L'utilisation unique de la propriété et pointeur brut autrement?

Je suis C++11-ing un peu de code. J'ai

class X { /* */ };

class A {
    std::vector<X*> va_x;
};

class B {
    std::vector<X*> vb_x;
    std::vector<A> vb_a;
};

Le X*s de "va_x" à l'intérieur de ma classe que d'Un point pour les objets qui sont également pointé par X*s de "vb_x" à l'intérieur de ma classe B.

Maintenant je voudrais utiliser des pointeurs intelligents. Pour moi, il semble clair que la classe B est la propriété des objets pointés par le X* (en particulier parce que mon instances appartiennent à B)

Donc je devrais utiliser un unique_ptr de X à l'intérieur B:

class B {
    std::vector<unique_ptr<X>> vb_x;
    std::vector<A> vb_a;
};

Ma question est, que dois-je faire pour la classe A? Devrais-je continuer à raw pointeurs? Ce faisant, dans mes tests unitaires, je dois avouer qu'elle mène pour certaines choses (omi), par exemple (ne vous inquiétez pas à propos de l'encapsulation, qui n'est pas le point):

unique_ptr<X> x(new X());
A a;
a.va_x.push_back(&(*x)); //awkward, but what else can I do?

A.vb_a.push_back(a); //ok
B.vb_x.push_back(move(x)); //ok
Pour les questions d'avenir sur le C++11, veuillez marquer avec C++ aswell. 🙂
N'avez-vous pas demander à un quasi identiques, question déjà?
Bien le précédent est également sur unique_ptr, mais ce n'est pas la même chose je pense
Vous devriez probablement juste de ne pas stocker des premières pointeurs dans le vecteur en premier lieu! Pourquoi ne pas mettre le unique les pointeurs dans le vecteur?
Dans ce cas, le magasin de référence de l'encapsulation en A, et de construire votre code, de sorte qu'il est obligatoire pour les B objet d'exister en premier.

OriginalL'auteur Bérenger | 2012-09-23