这个问题已经在这里有一个答案:
- 是的std ::的unique_ptr <T>要知道T的完整定义需要的? 7个回答
我认为它是有用使用正班宣言结合std::unique_ptr
如下面的代码。 它编译,并与海湾合作委员会的工作,但整个事情似乎有种奇怪,我不知道这是否是标准的行为(即标准所要求的)? 由于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)被定义。