如何将 unique_ptr 与前向声明类型一起使用?
How to use unique_ptr with forward declared type?
前向声明以避免循环头文件依赖或实现 pimpl 是很常见的,那么最终可能会得到如下代码:
class A;
class B
{
A * a;
};
当有人试图用 unique_ptr 替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器抱怨。让这项工作发挥作用的最佳做法是什么?
需要声明封闭 class B 的析构函数,并在源文件中将其设置为默认值,这样 unique_ptr 就不会强制内联它自己的默认删除器。
class B
{
public:
~B();
private:
std::unique_ptr<A> a;
};
并在源文件中
#include <A.h>
... do stuff with ( a )
B::~B() = default;
应该完成这项工作。
前向声明以避免循环头文件依赖或实现 pimpl 是很常见的,那么最终可能会得到如下代码:
class A;
class B
{
A * a;
};
当有人试图用 unique_ptr 替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器抱怨。让这项工作发挥作用的最佳做法是什么?
需要声明封闭 class B 的析构函数,并在源文件中将其设置为默认值,这样 unique_ptr 就不会强制内联它自己的默认删除器。
class B
{
public:
~B();
private:
std::unique_ptr<A> a;
};
并在源文件中
#include <A.h>
... do stuff with ( a )
B::~B() = default;
应该完成这项工作。