Ich bin C++ 11-ing einige Code. Ich habeVerwenden Sie unique_ptr für Besitzer und rohen Zeiger sonst?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
Der X * s von „va_x“ in meiner Klasse A Punkt auf Objekte, die zu
durch den X * s von „vb_x“ in meiner Klasse B. auch darauf sindNun möchte ich mag intelligente Zeiger verwenden. Für mich scheint es klar, dass die Klasse B, das Eigentum an den Objekten hat durch die X * hingewiesen (insbesondere, weil meine A-Instanzen zu B gehören)
Also soll ich eine unique_ptr für X innen B verwenden:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
Meine Frage ist, was soll ich für Klasse A tun? Soll ich rohe Zeiger behalten? Dadurch in meinen Unit-Tests so, muß ich zugeben, dass es zu umständlich Dingen führt (imo) zum Beispiel (nicht über Verkapselung Sorge, das ist nicht der Punkt):
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
Für zukünftige Fragen über C++ 11, bitte markieren Sie sie auch mit C++. :) – Xeo
Haben Sie nicht schon vorher eine nahezu identische Frage gestellt? – Puppy
@DeadMG Nun, die vorherige ist auch über unique_ptr, aber das ist nicht das Gleiche, was ich denke –