<分区>
前向声明以避免循环头文件依赖性或实现 pimpl 是很常见的,那么最终可能会得到如下代码:
class A;
class B
{
A * a;
};
当有人试图用 unique_ptr 替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器报错。让这项工作发挥作用的最佳做法是什么?
标签 c++ unique-ptr
<分区>
前向声明以避免循环头文件依赖性或实现 pimpl 是很常见的,那么最终可能会得到如下代码:
class A;
class B
{
A * a;
};
当有人试图用 unique_ptr 替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器报错。让这项工作发挥作用的最佳做法是什么?
最佳答案
需要声明封闭类 B 的析构函数,并在源文件中将其设置为默认值,这样 unique_ptr 就不会强制内联它自己的默认删除器。
class B
{
public:
~B();
private:
std::unique_ptr<A> a;
};
在源文件中
#include <A.h>
... do stuff with ( a )
B::~B() = default;
应该完成这项工作。
关于c++ - 如何将 unique_ptr 与前向声明类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212686/