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
.
#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).