estoy usando estas dos clasesC++, cómo copiar correctamente std :: vector <Class *> en copy constructor?
// This is generic data structure containing some binary data
class A {
public:
A();
A(const A&);
~A();
}
// Main data container
class B {
public:
B();
B(const B&);
~B();
protected:
std::vector<A *> data;
}
// Copy constructor for class b
B::B(const B& orig):data() {
for(std::vector<A *>::const_iterator it = orig.data.begin();
it < orig.data.end(); ++it){
data.push_back(new A(*(*it)));
}
}
supongo que esta clase lo haría trabajo, pero estoy encontrando a manera de cómo llegar a la perfección total en este.
Al principio :data()
- ¿esta inicialización es necesaria para inicializar el vector vacío correctamente (y es parte de escribir un código bueno y limpio)?
Cómo usar vector::iterator
en el constructor de copias, la única forma que encontré es la que he escrito en el código (const debe ser obligatorio para el constructor de copias).
¿Copiar solo vector copiará solo los valores del puntero y no los objetos completos?
Y, finalmente, la inicialización de datos nuevos ... ¿Hay alguna manera de cómo puedo reemplazar todo el bucle con una pieza más pequeña de código y/o hay algún estándar sobre cómo escribir el constructor de copia para std :: containers que contiene punteros a objetos?
Sub pregunta: ¿Asumo utilizando vector<A *>
es mucho más conveniente y eficaz por varias razones que sólo vector<A>
(no copiar cada vez, poder para decidir si (no) para copiar objetos ...)
Quizás quiso decir "Sub pregunta: supongo que estoy usando un vector de punteros ..." –
Preasignación de' datos' en la lista de inicialización. Usar 'push_back()' como ese es muy ineficaz. – lapk
Subrespuesta: Creo que si no puedes usar punteros, no deberías usarlos. – Lol4t0