作为一个大型爱好学习项目的一部分,我已经实现了一个几乎完整的智能指针实现。它几乎可以满足我所有的需求,但有一个细节问题可能会成为致命缺陷,如果我不能解决它。举个例子:
//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并不是这个项目的目的,因为它基本上是一个业余/学习项目。那么boost是如何解决这个问题的?在这种情况下,我该如何让智能指针的行为像原始指针一样?我有几个想法,但我觉得把这个问题放到SO上可以把想法列表减少到一个有用的子集。
提前感谢您帮助我解决这个问题。