favor considere lo siguiente:C contenedor STL ++ y la construcción en el lugar
class CMyClass
{
public:
CMyClass()
{
printf("Constructor\n");
}
CMyClass(const CMyClass&)
{
printf("Copy constructor\n");
}
};
int main()
{
std::list<CMyClass> listMyClass;
listMyClass.resize(1);
return 0;
}
Se produce el siguiente resultado:
Constructor
constructor de copia
Ahora mi La pregunta es: ¿Cómo evito el constructor de copias? O para decirlo de otra manera: ¿cómo puedo crear objetos dentro de un contenedor STL sin la operación de copia innecesaria? ¿Hay alguna forma de hacer una construcción "in situ" utilizando el constructor predeterminado?
Actualizar - respuestas hasta el momento:
- No se puede hacer
- utilizan punteros o punteros inteligentes lugar.
Los punteros inteligentes son un exceso para mi aplicación. Pero realmente me pregunto por qué no se puede hacer esto. Parece algo tan obvio como querer hacer. ¿Alguna otra idea? Incluso voy a aceptar un corte desagradable si funciona ...
Solución
Creo que acabo de encontrar una solución para mi problema de todos los comentarios y respuestas planteadas aquí. La solución es construir un objeto vacío y guardarlo con el único propósito de usarlo más adelante para hacer copias limpias de. Luego puede usar uno de los métodos que toman una referencia (como push_back o insert). Esto todavía llama al constructor de copia para cada nuevo objeto insertado, pero al menos no lo es tanto el constructor por defecto y copiar constructor:
int main()
{
CMyClass Empty;
std::list<CMyClass> listMyClass;
for (int c=0; c<10; ++c)
{
listMyClass.push_back(Empty);
}
return 0;
}
Podría parecer una algo obvio, pero desde un punto de vista funcional, no importa y varios algoritmos (ordenar, eliminar, ...) también usan copia, así que prepárate para ser copiado;) (Ver también http: //www.devx .com/tips/Tip/13606) – stefaanv
¿Algo obvio que hacer? ¿Porqué es eso? ¿Por qué está copiando un problema? – jalf
¿Obvio? Si llama a 'mylist.resize (10)', ¿cómo esperaría terminar con diez objetos distintos si no son copias? – visitor