为了避免循环头文件依赖,或者为了实现pimpl而拥有前向声明是很常见的,那么最终会得到如下代码:
class A;
class B
{
A * a;
};
当试图用unique_ptr替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器抱怨。让这个工作的最佳做法是什么?
答案 0 :(得分:0)
需要声明封闭类B的析构函数,并在源文件中将其设置为default,以便unique_ptr不会强制内联其自己的默认删除器。
class B
{
public:
~B();
private:
std::unique_ptr<A> a;
};
并在源文件中
#include <A.h>
... do stuff with ( a )
B::~B() = default;
应该做的工作。