通常、あるクラスに対してコピーコンストラクタが定義されていない場合、コピーコンストラクタは必要に応じて自動生成されるものと思います。
しかし、必要なのにコピーコンストラクタを明示的に定義しておかないと自動生成が行われないケース(つまり、コンパイル時にコピーコンストラクタが見つからないというエラーが出る)があって、不思議に思っているのですが、そのような場合には一般的にどのようなケースが考えられるでしょうか?
なお、たとえば当該クラスの親クラスのコピーコンストラクタがprivateになっているような場合は、「コピーコンストラクタが見つからない」ではなく、「コピーコンストラクタにアクセスできない」というエラーになりますので、そのようなケースは除外してください。
また、コンパイラの設定で自動生成を禁止している、というケースも除外してください。
一応、当方のコンパイル環境はC++Builder5ですが一般的なC++の話で結構です。
ひとまず1例として見つけたのは、コピーコンストラクタへのアクセスが禁止されているクラスをメンバとして持つクラスが上記の例にあたるようです。
コピーコンストラクタの引数が const 参照になっていないという事はありませんか?
const を付けていないと、コンテナへの代入時にコピーコンストラクタが定義されていないというエラーになります。(Visual C++ 6.0)
ご回答、ありがとうございます。ただ、それはないと思います。
・・・と思ったのですが、全クラスメンバについてコピーコンストラクタを確認してみたところ、引数にconstを付け忘れているメンバクラスを発見しました・・・。全くお恥ずかしい話です。ご指摘、ありがとうございました。
今回の教訓として、コピーコンストラクタの自動生成が行われない場合は、メンバ中にコピーコンストラクタが適切に定義されていない(privateになっていたり、引数定義にconstがついていなかったりする)ものがある、ということですね。
親クラスのコピーコンストラクタが不適切な場合は、アクセスできない旨のエラーが出るため分かりやすいですが、メンバの定義が不適切な場合は要注意です。トホホ・・・。