Tengo una clase que genera un número arbitrario de objetos de trabajo que calculan sus resultados en std::vector
. Voy a eliminar algunos de los objetos del trabajador en ciertos puntos, pero me gustaría mantener sus resultados en un orden determinado, solo conocido por la clase que los spawned
. Por lo tanto, proporciono los vectores para la salida en la clase A.iterador frente a referencia frente a puntero
Tengo (IMO) tres opciones: podría tener punteros a los vectores, referencias o iteradores como miembros. Mientras que la opción del iterador tiene ciertas desventajas (el iterador podría incrementarse). No estoy seguro de si los punteros o las referencias son más claros. Creo que las referencias son mejores porque no pueden ser NULL y un cruncher requeriría la presencia de un vector.
Lo que no estoy seguro es la validez de las referencias. ¿Serán invalidados por algunas operaciones en el std::list< std::vector<int> >
? ¿Son esas operaciones lo mismo que invalidar los iteradores de std::list
? ¿Hay otro enfoque que no veo ahora? También el acoplamiento a un contenedor no se siente bien: forzo un contenedor específico a la clase Cruncher.
Código proporcionado para mayor claridad:
#include <list>
#include <vector>
#include <boost/ptr_container/ptr_list.hpp>
class Cruncher {
std::vector<int>* numPointer;
std::vector<int>& numRef;
std::list< std::vector<int> >::iterator numIterator;
public:
Cruncher(std::vector<int>*);
Cruncher(std::vector<int>&);
Cruncher(std::list< std::vector<int> >::iterator);
};
class A {
std::list< std::vector<int> > container;
boost::ptr_list< std::vector<int> > container2;
std::vector<Cruncher> cruncherList;
};
Iba a usar std :: list para almacenar los referentes como se indica en el muestra. Si solo cambia su cita de la norma a la sección que explica la invalidación de las listas, su respuesta está bien. – pmr
@pmr - actualicé mi respuesta para incluir más información sobre listas. –