【C++】静的クラス実装時には…

eyecatch C/C++
soucecodeIMGL9028_TP_V4

今回はC++豆知識です(^^)

「静的メンバーだけで構成されるクラス(いわゆる static utility class)」 について、C++でどう守るべきか。

✅ 結論:コンストラクタ・コピー・ムーブは明示的に = delete すべき!

これに尽きます。
例えば以下のようにします( `・∀・)ノ

class SomeUtility final
{
public:
    SomeUtility() = delete;
    SomeUtility(const SomeUtility&) = delete;
    SomeUtility& operator=(const SomeUtility&) = delete;
    SomeUtility(SomeUtility&&) = delete;
    SomeUtility& operator=(SomeUtility&&) = delete;

    static void DoSomething();
};

✅ なぜこうするの?

理由説明
❌ インスタンスを作らせたくないユーティリティクラスは SomeUtility::DoSomething() のように使う設計
✅ コンパイル時に誤用を防げるSomeUtility util; のような間違いをビルド時に防止
✅ move/コピー防止も明示クラスの意味を明確に伝える(「これは完全にstatic用です」)

✅ これはシングルトンとは違うの?

はい、違います。

シングルトンクラスを実装する場合にも同様のコンストラクタ、コピーなどを削除しますが、違いとしては以下の理由があります。

パターン説明
ユーティリティクラス(staticのみ)インスタンスを一切作らせない構造
シングルトン1つだけ作る構造。static Instance() で取得し、内部状態を持つ

✅ まとめ

  • コンストラクタは = delete で禁止にする。
  • コピー/ムーブは = delete で禁止にする。
  • クラス内はすべて static メンバー。

コメント

タイトルとURLをコピーしました