2010-12-12 10 views
1

私はクラスのヒープ割り当てを防止する方法を知っています(newとnew [] privateを作る)。 私はスタックと静的な割り当てを防ぐ方法を知っています(デストラクタをプライベートにする)。C++静的専用クラスの割り当て

コンパイル時に静的な割り当てのみを許可することはありますか?

+1

は、なぜあなたはこれをしたいのでしょうか? –

+0

私は起動時に解析される静的コンフィギュレータクラスのインスタンスを設定したいが、起動後にインスタンスを作成したくないので、コンパイラによってフラグが立てられたい。 – zzz777

答えて

2

いいえ。ごめんなさい。理由は、静的割当てでは、自動割当てと同じタイプの要件がまったく同じになります。それは区別できません。

ただし、クライアントコードが型をインスタンス化しないようにすることができ、型の独自のコードで作成された1つ以上のインスタンスへのアクセスを提供できます。

一般的に、シングルトンなどは素晴らしいアイデアだと思う人も多いでしょうが、何かが制御されているような感覚を与えるかもしれませんが、とにかく起こるのはいつかより一般的なインスタンス化が必要なことです。単に無駄にされたのではなく、積極的により多くの&hellipを生成します。完全に不必要な…作業。

一般的なアドバイスは、時期尚早の最適化については行わないでください。

場合によっては適切な解決策になることもありますが、

乾杯& HTH。、

2

なぜ名前空間を使用しないのですか?静的なインスタンスしか持たない場合は、クラスに何かをラップする必要はありません。

1

クラスのすべてのインスタンスを強制的に静的にする方法はありません。代わりに静的メンバーだけを持つクラスを作成できますか?

私の意見では、これはnamespaceを使用するよりも優れています。なぜなら、名前空間はプライベートメンバーを持つことができないからです。

+0

匿名の名前空間は、基本的にコンパイル単位専用です。それのどこが悪いんだい? – greyfade

+0

すべての実装の詳細をコンパイル単位全体に公開する必要があるのはなぜですか?この名前空間が単独でコンパイル単位にあったとしても、匿名の名前空間を使用する場合と、静的なメンバのみを持つクラスを使用する場合の利点はありません。私は間違っているかもしれません。それは初めてではありません! – ClosureCowboy

+0

カウボーイ:データのコピーはOPの要件を超えているだけです。 – Yttrill

関連する問題