std::unique_ptr
以下のコードのように、クラスの前方宣言を組み合わせて使用すると便利であることがわかりました。コンパイルしてGCCで動作しますが、全体が奇妙に思えます。これが標準の動作であるかどうか(つまり、標準で要求されているかどうか)。を宣言するとき、Bは完全な型ではないので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.
これはデストラクタに関係していると思います(したがって、のデストラクタを呼び出す必要がありますunique_ptr<B>
)は、特定のコンパイルユニット(A.cpp)で定義されています。