我發現這個問題When to use forward declaration?這是有用的,但它是描述性的而不是說明性的。C++我應該使用前向聲明嗎?
我的場景通常是使用指向另一個類的指針,作爲類成員或函數參數,因此我只需要在頭文件中提供一個前向聲明(也作爲旁白,如果我要切換到使用boost shared_ptr是否與使用前向聲明兼容?)。目前我只是包括標題,但現在我想知道是否應該使用前向聲明。
所以我的問題是,如果我可以使用一個類的前向聲明,應該我?我希望這個問題不是主觀的,但如果沒有最佳實踐答案,那麼使用前向聲明有什麼優點/缺點?
UPDATE
只是對shared_ptr的問題擴大(我現在不使用他們,但考慮到開關)。如果我要使用它們,我想我會使用在類中定義shared_ptr類型的做法。例如:
class Customer
{
public:
typedef std::tr1::shared_ptr<Customer> SharedPointer;
Customer() {}
virtual ~Customer() {}
virtual std::string GetName() const;
};
看起來像這樣可能會使事情變得更加混亂。前向聲明會造成問題嗎?如果有的話,是否有簡單的解決方法?
只是爲了完成答案:是的,'boost :: shared_ptr'正常工作,正向聲明 –
它更快,並避免了問題。是的,肯定更喜歡preclarations包括。 –