Das Problem mit dem Kopierkonstruktor und dem Kopierzuweisungsoperator besteht darin, dass der Compiler Implementierungen automatisch generiert, wenn sie nicht explizit deklariert sind.
Dies kann leicht zu unbeabsichtigten Problemen führen. Wenn eine Klasse einen nicht-trivialen Destruktor hat, muss sie fast immer auch eigene Implementierungen für den Kopierkonstruktor und den Kopierzuweisungsoperator bereitstellen (dies ist der Law of the Big Three), da die vom Compiler erzeugten Standard-Generatoren normalerweise das Falsche tun.
Verletzung des Gesetzes der Big Three führt oft zu Fehlern wie Doppel-Frees von Datenelementen und Speicherbeschädigung. Es kommt nicht selten vor, dass diese Art von Fehlern auftritt, weil der Autor der Klasse sich nie Gedanken über das Kopierverhalten gemacht hat und es für die Verbraucher leicht ist, Objekte unbeabsichtigt zu kopieren.
Wenn der Autor der Klasse nicht wirklich darüber nachgedacht hat, Instanzen dieser Klasse ordnungsgemäß zu kopieren (oder die Klasse einen trivialen Destruktor hat), ist es besser, das Kopieren explizit zu verbieten, um mögliche Probleme zu vermeiden. Die Implementierung der Kopierbarkeit könnte dann aufgeschoben werden, bis ein tatsächlicher Bedarf dafür besteht.
Sie heißen "Copy Constructor" und "Zuweisungsoperator". Es gibt keinen Zuweisungskonstruktor. – Sjoerd
Ich würde sie entweder "Konstruktor" und "Zuweisungsoperator" oder "Kopiere Konstruktor" und "Kopierzuweisungsoperator" nennen. –
würde ich das EVIL nicht nennen, diese Art von Farben sie in einem schlechten Licht. Deaktivieren Sie sie einfach wie boost: boost :: nicht kopierbar –