私見、コピーコンストラクターと代入演算子を提供するかどうかは、コピーのコストよりもクラスがモデル化するものに依存します。
クラスがvaluesを表す場合、つまり、オブジェクトまたはオブジェクトのコピーを渡しても違いがない場合は、それらを提供します (また、等値演算子も提供します)。
クラスがそうでない場合、つまり、クラスのオブジェクトにアイデンティティと状態があると思われる場合(エンティティについても話します)、そうしないでください。コピーに意味がある場合は、クローンまたはコピー メンバーを提供します。
簡単に分類できないクラスが時々あります。コンテナはその位置にあります。それらをエンティティと見なし、参照によってのみ渡し、必要に応じてコピーを作成する特別な操作を行うことは意味があります。それらを単に値の集合と見なすこともできるため、コピーは理にかなっています。STL は、値型を中心に設計されました。そして、すべてが値であるため、コンテナがそうであることは理にかなっています。これによりmap<int, list<> >
、便利なことが可能になります。(コピーできないクラスを STL コンテナーに入れることはできないことに注意してください)。