Правило трёх (C++ программирование)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

Эти три метода являются особыми членами-функциями, автоматически создаваемыми компилятором в случае отсутствия их явного объявления программистом. Если один из них должен быть определен программистом, то это означает, что версия, сгенерированная компилятором, не удовлетворяет потребностям класса в одном случае и, вероятно, не удовлетворит в остальных случаях.

Поправка к этому правилу заключается в том, что если используется RAII (от англ. Resource Acquisition Is Initialization), то используемый деструктор может остаться неопределённым (иногда упоминается как «Закон Большой Двойки»)[2].

Так как неявно определённые конструкторы и операторы присваивания просто копируют все члены-данные класса[3], определение явных конструкторов копирования и операторов присваивания копированием необходимо в случаях, когда класс инкапсулирует сложные структуры данных или может поддерживать эксклюзивный доступ к ресурсам. А также в случаях, когда класс содержит константные данные или ссылки.

Ссылки[править | править вики-текст]

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