因此,作为一个大型爱好学习项目的一部分,我实现了一个几乎完整的智能指针实现。它几乎完成了我要求的所有事情,除了一个小细节,如果我无法解决它可能会破坏交易。人为的例子:
//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;
};
如您所料,前面的代码给了我 警告 C4150:删除指向不完整类型“type”的指针;没有调用析构函数
。我知道为什么会这样;在 Header2.h
中,智能指针代码包括对 A
的前向声明实例的删除。如果我可以包含 Header1.h
,没问题。我真的不希望在这一点上进行重构。
我听说 boost 智能指针以某种方式解决了这个问题。引入提升不是这个项目的目的,因为它几乎是一个爱好/学习项目。那么boost是如何处理这个问题的呢?在这种情况下,如何让智能指针表现得像原始指针?我有一些想法,但我认为将问题 float 到 SO 可以将想法列表剔除成有用的子集。
转发,感谢您帮助我解决这个问题。
最佳答案
So how does boost deal with this issue?
Boost 通过在智能指针类模板中使用 checked_delete
而不是 delete
来处理这个问题,因此需要 A
的完整定义。
关于c++ - 智能指针、前向声明和 C4150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775633/