Declaración de reenvío con unique_ptr? [duplicar
Esta pregunta ya tiene una respuesta aquí:
Is std :: unique_ptr <T> requerido para conocer la definición completa de T? 7 respuestas Me ha resultado útil utilizar la declaración directa de clases en combinación constd::unique_ptr
como en el siguiente código. Se compila y funciona con GCC, pero todo parece extraño, y me pregunto si este es un comportamiento estándar (es decir, requerido por el estándar). Como B no es un tipo completo cuando declaro elunique_ptr
.
#include <memory>
class B;
class A {
std::unique_ptr<B> myptr;
// B::~B() can't be seen from here
public:
~A();
};
A.cpp#include "B.hpp"
//B.hpp has to be included, otherwise it doesn't work.
A::~A() = default; // without this line, it won't compile
// however, any destructor definiton will do.
Sospecho que esto tiene que ver con el destructor (y, por lo tanto, la necesidad de llamar al destructor deunique_ptr<B>
) se define en una unidad de compilación específica (A.cpp).