2011-07-28 19 views

Respuesta

8

Por defecto es no copiable, a menos que se crea un constructor de copia personalizada y evite llamar allí a un constructor de copia base.

Vea también Explicitly-defaulted and deleted special member functions introducido en C++ 11. Aunque hacer una copia de un constructor/operador privado resuelve el problema, el compilador genera un mensaje de diagnóstico que está lejos de ser bonito y obvio, por lo que los operadores/constructores de copia eliminados están ahí en C++ 11 para resolver este problema.

+1

... y eso casi seguro sería "roto". –

+0

@Tomalak: Sí :-) Pero aún es posible, jeje. –

2

Suponiendo que la clase derivada no tiene un constructor de copia personalizado que evite llamar al copiador-constructor no copiable, entonces sí. En todos los niveles, todas las clases derivadas de boost::noncopyable no serían copiables. Como objeto de la clase derivada también contiene el subobjeto de boost::noncopyable que es non-copyable, que significa que no hay clase derivada puede ser copiable sin la base de clase siendo copiable,

1

Bar deriva de boost::noncopyable (aunque no es una herencia directa), entonces sí.

1

Sí, si fuera copiable entonces todas las clases de base debe ser copiable, pero boost :: noncopyable es noncopyable

+0

"si fuera [copiable], entonces todas las clases derivadas deben ser copiables" <- no es así. Considera 'struct Bar: struct Foo, boost :: noncopyable {};'. 'Foo' se puede copiar (decir), pero' Bar' no. –

+1

@Tomalak: Sí, he mezclado 'base' y' derived' - corregido ahora – ks1322

Cuestiones relacionadas