7

スマート ポインターで不完全な型を使用することと、ポインターがどのように削除されるかが心配です。次のコードは安全ですか? 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: 不完全な型を削除できません。それが私の質問に答えていると思います。

4

2 に答える 2