boost::scoped_ptr
ヘッダーファイルで前方宣言を使用しています。
//Bar.h
class Foo;
class Bar;
{
private:
boost::scoped_ptr<Foo> _foo;
};
スマートポインタがその仕事をするので、私は自分のデストラクタを実装しません。
このヘッダーファイルを複数の翻訳単位にインクルードしましたが、すべてにFoo
定義が含まれているわけではありません。コンパイルしようとすると、scoped_ptr
不完全な型へのポインタを削除するというエラーが発生しますFoo
。
で空のデストラクタを宣言し、Bar.h
で実装すると、すべてが簡単に修正されBar.cpp
ます。
ただし、デストラクタがヘッダーファイルに実装されている場合は、同じエラーが発生します。
したがって、問題は、暗黙的に定義されたメソッドがどの変換ユニットに入るのかということです。