I am C++ 11 -ing un po 'di codice. HoUtilizzare unique_ptr per la proprietà e il puntatore raw in caso contrario?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
X * s di "va_x" dentro la mia classe Un punto da oggetti che sono anche puntato dal X * s di "vb_x" dentro la mia classe B.
ora vorrei piace usare puntatori intelligenti. Per me, sembra chiaro che la classe B ha la proprietà degli oggetti appuntiti dal X * (in particolare perché le mie istanze di A appartengono a B)
Quindi dovrei usare un unique_ptr per X all'interno B:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
La mia domanda è: cosa devo fare per la classe A? Dovrei mantenere i puntatori grezzi? In questo modo, nel mio test di unità, devo ammettere che conduce a cose scomode (IMO), per esempio (non preoccuparti incapsulamento, non è questo il punto):
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
Per domande future su C++ 11, contrassegnali con C++. :) – Xeo
Non hai mai fatto una domanda praticamente identica in precedenza? – Puppy
@DeadMG Beh, il precedente riguarda anche unique_ptr ma questa non è la stessa cosa penso che sia –