Deklaracja przekazania z Unique_ptr? [duplikować

To pytanie ma już odpowiedź tutaj:

Czy std :: unique_ptr <T> jest wymagany do poznania pełnej definicji T? 7 odpowiedzi

Uważam, że użyteczne jest używanie deklaracji klas w połączeniu zstd::unique_ptr jak w kodzie poniżej. Kompiluje się i współpracuje z GCC, ale cała sprawa wydaje się dziwna i zastanawiam się, czy jest to standardowe zachowanie (tj. Wymagane przez standard)? Ponieważ B nie jest kompletnym typem, kiedy deklarujęunique_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.

Podejrzewam, że ma to związek z destruktorem (a zatem koniecznością wywołania destruktora zunique_ptr<B>) jest zdefiniowany w konkretnej jednostce kompilacji (A.cpp).

questionAnswers(1)

yourAnswerToTheQuestion