Правило трьох («Закон великої трійки», «Велика трійка») — практичне правило в C++, яке каже, що якщо в класі визначений один з таких методів, то, найпевніше, в ньому мають бути визначені всі три: Деструктор () Конструктор копіювання () Оператор присвоєння копіюванням ()
Ці три особливі функції-члени, можуть автоматично створюватися компілятором у випадку, якщо програміст не визначив їх явно (насправді, це не завжди так, наприклад, якщо один з атрибутів класу константа і, таким чином, вимагає явної ініціалізації). Якщо один з них має бути визначений програмістом, значить версія створена компілятором не підходить, а це означає, що, найпевніше, версії компілятора не підійдуть і для двох інших функцій.
Правда, у випадку якщо використовується техніка «виділення ресурсу є ініціалізація» можна покластися на версію деструктора від компілятора (іноді згадують як «Закон великої двійки»).
Через те, що неявно згенеровані конструктори і оператори надання значення просто копіюють всі члени даних класу визначення явних конструкторів копіювання і операторів присвоювання необхідно у випадках, коли клас інкапсулює складні структури даних або має зовнішні посилання такі як вказівники, що означає можливість копіювання лише самого вказівника, а не об'єкта на який він вказує.
Правило п'яти В C++11 додали семантику переміщення, тому в правило додано ще два методи: Конструктор переміщення () Оператор присвоєння переміщенням ()
Примітки