我一直在使用类似的RefCounted基类很多,我开始想知道为什么我从来没有这个问题。这是因为我倾向于隐藏源文件中的实现细节。考虑B类以下的头文件:
//File: B.h
#include <boost/intrusive_ptr.hpp>
class A;
class B
{
public:
B();
~B();
boost::intrusive_ptr<A> foo();
void foo2(const boost::intrusive_ptr<A> p);
boost::intrusive_ptr<A> p;
};
它的工作原理,因为即使它使用intrusive_ptr,它并不需要实例构造函数和析构函数。因此它不需要知道关于类A的任何信息。
需要了解A的地方在源文件中。 (并且在foo/foo2被调用的地方)。 B的构造函数和析构函数隐含地调用了A>的构造函数/析构函数,所以A的定义必须可用。
//File: B.cpp
#include "B.h"
#include "A.h" //Include header where A is defined.
B::B() { }
B::~B() { }
//Other member functions...
我不知道如果这能帮助你的情况,但它的一些思考。 :)
稍微偏离主题,但链接中存在CRefCounted类的严重缺陷,因为它没有定义虚拟析构函数。 – Timo 2011-12-29 19:12:48