Forward-Deklaration mit unique_ptr? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Ist std :: unique_ptr <T> erforderlich, um die vollständige Definition von T zu kennen? 7 answers

Ich habe es nützlich gefunden, die Forward-Deklaration von Klassen in Kombination mit @ zu verwendestd::unique_ptr wie im Code unten. Es kompiliert und funktioniert mit GCC, aber die ganze Sache scheint irgendwie seltsam, und ich frage mich, ob dies Standardverhalten ist (d. H. Vom Standard verlangt)? Da B kein vollständiger Typ ist, wenn ich das @ deklarieunique_ptr.

A.hpp
#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.

Ich vermute, das hat mit dem Destruktor zu tun (und deshalb muss der Destruktor von @ aufgerufen werdeunique_ptr<B>) ist in einer bestimmten Kompilierungseinheit (A.cpp) definiert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage