職場の大学は、静的メソッドのみを使用してクラスを作成しました。彼はインスタンス化を避けたいので、(プライベート)コンストラクターを追加しました。これまでのところ問題ありません。ただし、コンストラクターは宣言されているだけで、実装はありません。したがって、一度使用すると「未定義の参照」が表示されます。
私見では、コンストラクターをプライベートにするのに十分でなければなりません-そして実装なしの宣言は醜いです。これについてどう思いますか?
職場の大学は、静的メソッドのみを使用してクラスを作成しました。彼はインスタンス化を避けたいので、(プライベート)コンストラクターを追加しました。これまでのところ問題ありません。ただし、コンストラクターは宣言されているだけで、実装はありません。したがって、一度使用すると「未定義の参照」が表示されます。
私見では、コンストラクターをプライベートにするのに十分でなければなりません-そして実装なしの宣言は醜いです。これについてどう思いますか?
あなたの懸念がわかります。
実際、コピーコンストラクターをプライベートにしてから実装しないままにしておくことは一般的な方法であり、場合によっては確かに必要です。これにより、よく知られているC++イディオムであるNonCopyableMixinが定義され、より「可視性」が向上しました。ただし、コピー不可能なミックスインが使用されておらず、ソリューションがローカルに適用されている場合でも、IMOは完全に受け入れられます(既知のイディオムであるため)。
あなたの特定のケースでは、私が理解しているように、コピーコンストラクターではなく、任意のコンストラクター(クラスは一部の静的メソッドの単なるコンテナーであり、初期化されたくない)について話しているので、名前空間を使用して、その中の関数はより良い解決策になるでしょう。
このようなオブジェクトを実際にインスタンス化しても、害はありません。プログラムの動作は変わりません。それでもインスタンス化を禁止したい場合は、はい、コンストラクターを実装しない方がよいでしょう。空のコンストラクターがある場合は、クラスのフレンド内およびクラスのメンバー関数内から呼び出される可能性があります。詳細については、この質問を参照してください。