relaciones - programacion orientada a objetos c++ ejemplos
¿Por qué no se aplica RVO a la inicialización de subobjetos de la clase base? (1)
Esto es un defecto en la redacción estándar. No se puede garantizar la elección de copia al inicializar un subobjeto de clase base, porque las clases base pueden tener un diseño diferente al tipo de objeto completo correspondiente.
¿Por qué es obligatorio el constructor de movimientos para Base
en caso de herencia ( class B
) en el siguiente código (tanto en gcc 7.2 como en 4.0)? Espero que no se requiera con elision de copia garantizada en C ++ 17, como en el caso de la composición ( class A
).
struct Base {
Base(Base&&) = delete;
Base& operator=(Base&&) = delete;
Base()
{
}
};
Base make_base()
{
return Base{};
}
struct A {
A() : b(make_base()) {} // <<<--- compiles fine
Base b;
};
#ifdef FAIL
struct B : public Base {
B() : Base(make_base()) {} // <<<--- "Base(Base&&) is deleted"
};
#endif