2010-03-18 20 views

Respuesta

13

clases que no se pueden copiar. Los contenedores STL requieren objetos para ser copiables ya que el contenedor posee una copia de ese objeto, y necesita poder moverlo.

+7

Aunque * punteros * (y punteros inteligentes) a las clases que no se pueden copiar están bien. –

+0

Excepto 'std :: auto_ptr'. No lo hagas! 'std :: tr1 :: shared_ptr' está bien. – Nate

4

Dependiendo de las operaciones que realice, a menudo necesita un constructor predeterminado además de ser copiado para objetos almacenados en contenedores. Para los objetos pasados ​​a los algoritmos, existen otros requisitos, como ser invocable o incrementable. Los requisitos están bien documentados.

9

Lo que más me gusta no poner en un contenedor STL es un std :: auto_ptr ... suceden cosas muy malas. .. la mayoría de la pérdida inesperada de objetos, creo.

En general, todo lo que no se pueda copiar no puede ir a un contenedor; obtendrá errores de compilación. Algo con semántica de copia anormal (como auto_ptr) no debería ir en un contenedor (pero probablemente no obtendrá ningún error de compilación). Como el contenedor es libre de crear varias copias temporales.

Creo que sin un operador de asignación y constructor por defecto "cuerdo" también se siente un poco molesto.

2

La clase no puede lanzar excepciones en el destructor ... así no hay clase nunca debe lanzar en el destructor

0

depende del contenedor, para más información, la sección 23 de la norma especifica los requisitos para todos los contenedores y métodos.

Para estar seguro, sin embargo, se debe asumir que la siguiente siempre se requieren: defecto de construcción y construcción copia

Cuestiones relacionadas