私はそれが正確でユーモラスであることがわかったので、ildjarnの答えを支持しました。:-)
OPが標準でそう言っている理由を知りたいと思うかもしれないという質問のタイトルのために、私は別の答えを提供しています。
バックグラウンド
C++ は暗黙のうちにコピー メンバーを生成しました。そうでなければ、C との互換性が非常に低く、1985 年にまだ誕生していなかっただろうからです。 .
そうは言っても、暗黙的に生成されたコピー メンバーは「悪魔との取引」に似ています。それらがなければ C++ は生まれませんでした。しかし、かなりの数のインスタンスで誤ったコードを静かに生成するという点で、それらは悪です。C++ 委員会は愚かではありません。彼らはこれを知っています。
C++11
C++ が誕生し、成長して成功を収めた今、委員会は次のように言いたいと思います。暗黙的にコピー メンバーを生成することはもうありません。彼らはあまりにも危険です。暗黙的に生成されたコピー メンバーが必要な場合は、その決定をオプトインする必要があります (オプトアウトするのではなく)。しかし、これを行うと壊れてしまう既存の C++ コードの量を考えると、それは自殺行為に等しいでしょう。非常に正当化される大きな後方互換性の問題があります。
したがって、委員会は妥協点に達しました。移動メンバーを宣言する場合 (従来の C++ コードでは実行できません)、既定のコピー メンバーが間違ったことを行う可能性が高いと想定します。必要に応じてオプトイン ( =default
) します。または、自分で書きます。それ以外の場合、それらは暗黙的に削除されます。移動のみのタイプを持つ世界でのこれまでの経験から、このデフォルトの位置が実際には非常に一般的に望ましいものであることが示されています (例: unique_ptr
、ofstream
などfuture
)。そして、オプトインの費用は、実際には非常にわずか= default
です。
楽しみにしている
委員会は次のようにも言いたいと思います。デストラクタを作成した場合、暗黙のコピー メンバが間違っている可能性が高いため、それらを削除します。これが C++98/03 の「3 つのルール」です。ただし、それでも多くのコードが壊れます。ただし、委員会は C++11 で、ユーザー宣言のデストラクタを提供する場合、コピー メンバーの暗黙的な生成は非推奨であると述べています。つまり、この機能は将来の標準で削除される可能性があります。そして、いつの日か、コンパイラがこの状況で「非推奨の警告」を発行し始める可能性があります (標準では警告を指定できません)。
結論
C++ は何十年にもわたって成長し、成熟してきました。つまり、あなたの父親の C++ は、あなたの子供の C++ に対処するために移行する必要があるかもしれません。これはゆっくりとした段階的なプロセスであるため、手を上げて別の言語に移植することはありません。しかし、たとえ遅くても、それは変化です。