我担心使用带有智能指针的不完整类型以及如何删除指针。下面的代码安全吗?我认为不会,因为 main.cpp 会生成 Farm 的默认析构函数,它不会看到完整的类型。为了安全起见,我认为我应该创建一个看到完整类型的非内联析构函数。那是对的吗?
std::vector<Cow>
如果我在 Farm 中使用,是否也一样?
农场.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() {}
主文件
#include "farm.h"
int main()
{
Farm farm;
}
编辑:我尝试在没有析构函数的情况下使用 Visual Studio 进行编译,它显示错误 C2338:无法删除不完整的类型。我想这回答了我的问题。