スマート ポインターで不完全な型を使用することと、ポインターがどのように削除されるかが心配です。次のコードは安全ですか? main.cpp はファームのデフォルトのデストラクタを生成し、完全な型が表示されないため、そうなるとは思いません。安全にするために、完全な型を見る非インライン デストラクタを作成する必要があると思います。あれは正しいですか?
std::vector<Cow>
また、代わりにファームで使用した場合も同じですか?
ファーム.h
class Cow;
struct Farm
{
Farm();
// ~Farm();
std::unique_ptr<Cow> cow;
};
ファーム.cpp
#include "cow.h"
// cow now complete
Farm::Farm()
{
cow.reset(new Cow);
}
// Farm::~Farm() {}
main.cpp
#include "farm.h"
int main()
{
Farm farm;
}
編集: デストラクタなしで Visual Studio でコンパイルしようとしましたが、エラー C2338: 不完全な型を削除できません。それが私の質問に答えていると思います。