Por ejemplo:¿Se prohíbe automáticamente la copia en clases derivadas de clases derivadas de Boost noncopyable?
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Es Bar
no copiable?
Por ejemplo:¿Se prohíbe automáticamente la copia en clases derivadas de clases derivadas de Boost noncopyable?
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Es Bar
no copiable?
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.
... y eso casi seguro sería "roto". –
@Tomalak: Sí :-) Pero aún es posible, jeje. –
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,
Bar
deriva de boost::noncopyable
(aunque no es una herencia directa), entonces sí.
Sí, si fuera copiable entonces todas las clases de base debe ser copiable, pero boost :: noncopyable es noncopyable
"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. –
@Tomalak: Sí, he mezclado 'base' y' derived' - corregido ahora – ks1322
1 porque se trata de una cuestión muy bien formada. Que creo que la respuesta es un poco obvia no es relevante. :) –
Tuve que pensarlo un poco antes de que se hiciera evidente. Me sorprendió que nadie hiciera esta pregunta. –