simple relaciones programacion poo orientada objetos herencia entre ejemplos derivada clases clase c++ c++17

relaciones - programacion orientada a objetos c++ ejemplos



¿Por qué no se aplica RVO a la inicialización de subobjetos de la clase base? (1)

Según Richard Smith :

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

example