Soy C++ 11-ing algún código. Tengo¿Usar unique_ptr para propiedad y puntero sin formato de lo contrario?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
El X * s de "va_x" dentro de mi clase de objetos Un punto que también se apunta la X * s de "vb_x" dentro de mi clase B.
Ahora que lo haría me gusta usar punteros inteligentes. Para mí, parece claro que la clase B tiene la propiedad de los objetos apuntados por el X * (en particular, porque mis casos A pertenecen a B)
por lo que debe utilizar un unique_ptr para X en el interior B:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
Mi pregunta es, ¿qué debo hacer para la clase A? ¿Debo mantener punteros sin procesar? Al hacer esto, en mis pruebas de unidad, debo admitir que conduce a cosas incómodas (OMI), por ejemplo (no se preocupe por encapsulación, que no es el 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
Para preguntas futuras sobre C++ 11, por favor también escríbalas con C++. :) – Xeo
¿No hizo una pregunta prácticamente idéntica anteriormente? – Puppy
@DeadMG Bueno, el anterior es también sobre unique_ptr, pero esto no es lo mismo. Creo que –