2

私は C++ で静的クラスを持っています。つまり、このクラスのすべてのメンバーは静的です。

クラスをインスタンス化したくないので、コンストラクターを非公開にします。このクラスはインスタンス化できないため、デフォルトのコピー代入演算子またはコピー コンストラクターを定義しませんでした。ただし、私の静的コード アナライザーは次のように表示します。

クラスがリソースを管理するためにデストラクタを宣言した場合は、同じ理由でコピー コンストラクタとコピー代入演算子も宣言する必要があります。

⇒このクラスはデストラクタを定義しなくても大丈夫ですか?作ることも出来ないのだから、壊すことも出来ないのだろうか?

->これは良い習慣ですか?私のデザインに何か問題がありますか?

4

1 に答える 1

5

クラスをインスタンス化したくないので、コンストラクターを非公開にします。

C++11 コンパイラにアクセスできる場合は、より良いオプションがあります。コンパイラが提供する「不要な」コンストラクタを明示的に削除できます。これにより、デストラクタの問題が解決されるはずです。コンパイラは、クラスを構築できないことを認識しているからです。

削除されたコンストラクター機能を使用できない場合は、コンストラクターをプライベートに宣言するだけで、外部のインスタンス化を防ぐことができます。破壊するものがないため、デストラクタは必要ありません。

これは良い習慣ですか?私のデザインに何か問題がありますか?

この方法は、独立した関数/変数を定義できない言語でより一般的です。一方、C++ は独立した関数と変数を提供します。これら 2 つの機能を名前空間と組み合わせることで、静的メンバーのみを持つクラスは不要になります。このようなクラスは、機能的には名前空間と同等ですが、C++ にとって慣用的ではありません。

于 2013-02-05T01:59:09.973 に答える