Правило трьох (C++)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

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

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

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

Примітки[ред.ред. код]

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