Правило трьох («Закон великої трійки», «Велика трійка») — практичне правило в C++, яке каже, що якщо в класі визначений один з таких методів, то, найпевніше, в ньому мають бути визначені всі три[1]:

Ці три особливі функції-члени, можуть автоматично створюватися компілятором у випадку, якщо програміст не визначив їх явно (насправді, це не завжди так, наприклад, якщо один з атрибутів класу константа і, таким чином, вимагає явної ініціалізації). Якщо один з них має бути визначений програмістом, значить версія створена компілятором не підходить, а це означає, що, найпевніше, версії компілятора не підійдуть і для двох інших функцій.

Правда, у випадку якщо використовується техніка «виділення ресурсу є ініціалізація» можна покластися на версію деструктора від компілятора (іноді згадують як «Закон великої двійки»[2]).

Через те, що неявно згенеровані конструктори і оператори надання значення просто копіюють всі члени даних класу[3] визначення явних конструкторів копіювання і операторів присвоювання необхідно у випадках, коли клас інкапсулює складні структури даних або має зовнішні посилання такі як вказівники, що означає можливість копіювання лише самого вказівника, а не об'єкта на який він вказує.

Правило п'яти ред.

В C++11 додали семантику переміщення, тому в правило додано ще два методи:

Примітки ред.

  1. Stroustrup, Bjarne (2000). The C++ Programming Language (вид. 3). Addison-Wesley. с. 283—4. ISBN 978-0201700732.
  2. Karlsson, Bjorn; Wilson, Matthew (1 жовтня 2004). The Law of the Big Two. The C++ Source. Artima. Архів оригіналу за 17 березня 2012. Процитовано 22 січня 2008.
  3. The C++ Programming Language. с. 271.