Me gustaría tener un vector de unique_ptr como miembro de una clase que estoy haciendo.¿Cómo declarar un vector de unique_ptr como miembro de datos de clase?
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
Pero entonces comienza a recibir mensajes de error crípticos de la VS2010 compilador:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Junto con un puñado de líneas de error por debajo de lo que sumergirse en la implementación de std::_Copy_impl<>
de Microsoft ...
Cambié la declaración del miembro a
vector<unique_ptr<Bar>>* barList;
Y compila. Pero no puedo evitar preguntarme por qué no puedo hacerlo de la manera que originalmente quería. Para las muecas, he intentado esto y funciona bien:
vector<Bar> barList;
Pero ahora que pierda la comodidad de unique_ptr
. ¡Quiero mi pastel y también quiero comerlo!
Estaba viendo http://stackoverflow.com/questions/8553464/vector-as-a-class-member y la respuesta parece pensar que declarar un 'vector' como lo hice está bien hacerlo. Por alguna razón, sin embargo, parece desencadenar copias ilegales al agregar la parte 'unique_ptr'. –
¿Cómo son el constructor de copias y el operador de asignación? –
Asignación privada, pero el constructor de copia fue el culpable. Cambié de 'unique_ptr' a' shared_ptr' cuando me di cuenta de que estaba usando la semántica de propiedad incorrecta. –