The rule of three (also known as the Law of The Big Three or The Big Three) is a rule of thumb in C++ that claims that if a class defines one of the following it should probably explicitly define all three: destructor copy constructor copy assignment operator These three functions are special member functions that are automatically created by the compiler if they are not explicitly declared by the programmer.

PropertyValue
dbpprop:abstract
  • The rule of three (also known as the Law of The Big Three or The Big Three) is a rule of thumb in C++ that claims that if a class defines one of the following it should probably explicitly define all three: destructor copy constructor copy assignment operator These three functions are special member functions that are automatically created by the compiler if they are not explicitly declared by the programmer. If one of these had to be defined by the programmer, it means that the compiler-generated version does not fit the needs of the class in one case and it will probably not fit in the other cases either. The term "Rule of three" was coined by Marshall Cline in 1991. An amendment to this rule is that if Resource Acquisition Is Initialization (RAII) is used the destructor may be left undefined (also known as The Law of The Big Two). Because implicitly-generated constructors and assignment operators simply copy all class data members, one should define explicit copy constructors and copy assignment operators for classes that encapsulate complex data structures or could has external references such as pointers, since only the pointer gets copied, not the object it points to.
  • Die Dreierregel, auch bekannt als Die Große Drei oder Regel der Großen Drei bezeichnet in C++ eine Daumenregel, die besagt, dass, wenn eine Klasse oder ein Struct eines der folgenden drei definiert, meistens auch die anderen beiden definiert werden sollten: Kopierkonstruktor Destruktor Zuweisungsoperator 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 Funktionen gemacht, so bedeutet das, dass die compilergenerierte Version der entsprechenden Funktion den Anforderungen der Klasse nicht genügt. Daraus lässt sich schließen, dass das wahrscheinlich auch bei den restlichen dieser drei Funktionen der Fall ist. Grund für diese Begebenheit ist die Tatsache, dass compilergenerierte Funktionen in vielen Fällen nicht ausreichen, um bestimmte Aufgaben zu erfüllen. Beispielsweise wenn die Klasse aus Objekten anderer Klassen zusammengesetzt ist, welche ausschließlich von ihr verwendet werden. Die compilergenerierte Variante kopiert nur die Zeiger auf die Objekte (shallow copy). 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 (deep copy). Gleicherweise wird beim Löschen des Objektes der Destruktor benötigt, um die Teilobjekte ebenfalls zu löschen. Die Regel kann auch auf andere objektorientierte Sprachen wie z.B. C# angewandt werden.
  • Правило трёх (также известное как «Закон Большой Тройки» или «Большая Тройка») — правило в C++, гласящее, что если класс или структура определяет один из следующих методов, то они должны явным образом определить все три метода: Деструктор Конструктор копирования оператор присваивания копированием Эти три метода являются особыми членами-функциями, автоматически создаваемые компилятором в случае отсутствия их явного объявления программистом. Если один из них должен быть определен программистом, то это означает, что версия, сгенерированная компилятором, не удовлетворит потребности класса в одном случае и, вероятно, не удовлетворит в остальных случаях. Поправка к этому правилу заключается в том, что если используется RAII (от англ. Resource Acquisition Is Initialization), то используемый деструктор может остаться неопределённым (иногда упоминается как «Закон Большой Двойки»). Так как неявно определённые конструкторы и операторы присваивания просто копируют все члены-данные класса, определение явных конструкторов копирования и операторов присваивания копированием необходимо в случаях, когда класс инкапсулирует сложные структуры данных или может поддерживать эксклюзивный доступ к ресурсам.
  • 三法則(英語:rule of three,the Law of The Big Three,The Big Three;三法則,三大定律)在 C++ 程式設計裡,它是一個以設計的基本原則而制定的定律,三法則的要求在於,假如類別有明顯地定義下列其中一個部分,那麼程式設計師必須連其他二個部分也一同編寫至類別內,亦即下列三者缺一不可。 解構子(Destructor) 複製建構子(copy constructor) 複製指定運算子(copy assignment operator) 上述三個函式是特別的成員函式,假如程式設計師沒有自行編寫宣告它們的話,那麼編譯器會自動地建立它們。假如程式設計師只有定義其中一個函式,那麼編譯器自動產生出來的函式不會搭配到這個類別內,當然它也不會搭配到其他的類別內。 這個法則的修正版本是,假如有用到 RAII(資源的取得與初始化,Resource Acquisition Is Initialization),解構子就有可能會被當成未宣告(也就是所謂的二大定律,The Law of The Big Two)。 因為隱性產生(由編譯器自動產生)的建構子與指定運算子可以很容易地複製類別內所有的資料成員,只要類別有包含指標資料成員,程式設計師應該為此而定義顯性的(由程式設計師來編寫清楚明確的)複製建構子,以及複製指定運算子,要注意的是,在此說的指標並不是由物件所指的指標。
dbpprop:hasPhotoCollection
rdfs:comment
  • The rule of three (also known as the Law of The Big Three or The Big Three) is a rule of thumb in C++ that claims that if a class defines one of the following it should probably explicitly define all three: destructor copy constructor copy assignment operator These three functions are special member functions that are automatically created by the compiler if they are not explicitly declared by the programmer.
  • Die Dreierregel, auch bekannt als Die Große Drei oder Regel der Großen Drei bezeichnet in C++ eine Daumenregel, die besagt, dass, wenn eine Klasse oder ein Struct eines der folgenden drei definiert, meistens auch die anderen beiden definiert werden sollten: Kopierkonstruktor Destruktor Zuweisungsoperator Diese werden automatisch vom Compiler generiert, können aber mit einer explizit durch den Programmierer definierten Version ersetzt werden.
rdfs:label
  • Rule of three (C++ programming)
  • Dreierregel (C++)
  • Правило трёх (C++ программирование)
  • 三法則 (C++程式設計)
owl:sameAs
skos:subject
foaf:page