今回は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 メンバー。
コメント