【发布时间】:2011-06-14 02:55:36
【问题描述】:
因此,作为一个大型爱好学习项目的一部分,我实现了一个几乎完整的智能指针实现。它几乎可以完成我要求的所有事情,除了一个小细节,如果我无法解决它可能会破坏交易。人为的例子:
//Header1.h
#include <Header2.h>
class A
{
//Methods and such that involve class B in return type / arguments
};
//Header2.h
class A; //Forward declaration of A, needed because A includes Header2.h
class B
{
public:
SmartPointer<A> Ptr;
};
如您所料,前面的代码给了我warning C4150: deletion of pointer to incomplete type 'type'; no destructor called。我知道为什么会这样;在Header2.h 中,智能指针代码包括对A 的前向声明实例的删除。如果我可以包含Header1.h,没问题。我真的不想在这一点上进行重构。
我听说 boost 智能指针以某种方式解决了这个问题。引入提升不是这个项目的目的,因为它几乎是一个爱好/学习项目。那么 boost 是如何处理这个问题的呢?在这种情况下,如何让智能指针表现得像原始指针一样?我有一些想法,但我认为将问题浮动到 SO 可以将想法列表筛选为有用的子集。
转发感谢您帮助我解决这个问题。
【问题讨论】:
标签: c++ smart-pointers forward-declaration