我一直在使用類似的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