Zum Inhalt springen

Dreierregel (C++)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 5. Mai 2013 um 15:51 Uhr durch Casu17 (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Die Dreierregel bezeichnet in der Programmiersprache C++ eine Regel, die besagt, dass, wenn eine Klasse eines der folgenden drei Elemente definiert, auch die jeweils anderen beiden definiert werden sollten[1]:

Diese werden automatisch vom Compiler generiert, können aber mit einer explizit durch den Programmierer definierten Version ersetzt werden. Wird das für eine dieser Elemente gemacht, so bedeutet das, dass die compilergenerierte Version des entsprechenden Elements den Anforderungen der Klasse nicht genügt. Daraus lässt sich schließen, dass das wahrscheinlich auch bei den restlichen dieser drei Elemente der Fall ist.

Grund für diese Begebenheit ist die Tatsache, dass compilergenerierte Elemente in vielen Fällen nicht ausreichen, um bestimmte Aufgaben zu erfüllen, beispielsweise wenn die Klasse aus Objekten anderer Klassen zusammengesetzt ist, die ausschließlich von ihr verwendet werden (Komposition). Die compilergenerierte Variante kopiert nur die Zeiger auf die Objekte (flache Kopie). Eine Manipulation des kopierten Objekts würde dann auch das Original beeinflussen, da beide auf dieselben Teilobjekte zugreifen. In einem solchen Fall ist der Kopierkonstruktor wichtig, um auch die Teilobjekte zu kopieren (tiefe Kopie). Gleicherweise wird beim Löschen des Objektes der Destruktor benötigt, um die Teilobjekte ebenfalls zu löschen.

Seit dem Erscheinen von C++11 wird diese Regel zur Fünferregel, in der auch

definiert werden sollen.[2]

Einzelnachweise

  1. Bjarne Stroustrup: The C++ Programming Language. 3. Auflage. Addison-Wesley, 2000, ISBN 978-0-201-70073-2, S. 283-4.
  2. WG21

Literatur

  • Stanley B. Lippman, Josèe Lajoie, Barbara E. Moo: C++ Primer. 4. Auflage. Addison-Wesley Professional, 2005. ISBN 978-0201721485