1. ホーム
  2. c++

[解決済み] 可能な限りincludeの代わりにforward宣言を使用すべきですか?

2023-03-19 05:12:48

質問

クラス宣言が他のクラスをポインタとしてのみ使用する場合、循環依存性の問題を事前に回避するために、ヘッダーファイルを含める代わりにクラスフォワード宣言を使用することは理にかなっていますか? そのため、代わりに

//file C.h
#include "A.h"
#include "B.h"

class C{
    A* a;
    B b;
    ...
};

は、代わりにこれを実行します。

//file C.h
#include "B.h"

class A;

class C{
    A* a;
    B b;
    ...
};


//file C.cpp
#include "C.h"
#include "A.h"
...

可能な限りこれを行わない理由はあるのでしょうか?

どのように解決するのですか?

forward-declaration 方式が良い場合がほとんどです。(前方宣言を使用できるファイルを含めることが良いという状況は考えられませんが、念のため常に良いとは言いません)。

クラスを前方宣言することにデメリットはありませんが、不必要にヘッダーを含めることにデメリットがあることは考えられます。

  • を含むすべての翻訳ユニットで、より長いコンパイル時間が必要になります。 C.h を含むすべての翻訳ユニットには A.h も含まれます。

  • 間接的に必要ない他のヘッダを含む可能性があります。

  • 翻訳ユニットを不要なシンボルで汚染する。

  • もしヘッダが変更されたら、そのヘッダを含むソースファイルを再コンパイルする必要があるかもしれません (@PeterWood)