Упрощенная версия: Я не понимаю цели этого правила. Правило трех и пяти — это своего рода «эмпирическое правило», но я не вижу «практического правила» или каких-либо других конкретных намерений в этом правиле.
Подробная версия:
Цитирую:
Классы, у которых есть пользовательские деструкторы, конструкторы копирования/перемещения или
операторы присваивания копирования/перемещения должны иметь дело исключительно с владением.
Другие классы не должны иметь собственные деструкторы, конструкторы копирования/перемещения
или операторы копирования/перемещения присваивания.
Что это значит? Что они подразумевают под владением, владением чем?
Они также показали пример кода (думаю, он связан со вступлением):
Код: Выделить всё
class rule_of_zero
{
std::string cppstring;
public:
rule_of_zero(const std::string& arg) : cppstring(arg) {}
};
Кроме того, они мы также говорим о сценарии, когда вы имеете дело с полиморфным классом, а деструктор объявляется общедоступным и виртуальным, и о том, что этот блок неявно перемещается. Поэтому вам придется объявить их все значениями по умолчанию:
Код: Выделить всё
class base_of_five_defaults
{
public:
base_of_five_defaults(const base_of_five_defaults&) = default;
base_of_five_defaults(base_of_five_defaults&&) = default;
base_of_five_defaults& operator=(const base_of_five_defaults&) = default;
base_of_five_defaults& operator=(base_of_five_defaults&&) = default;
virtual ~base_of_five_defaults() = default;
};
Я знаю, что в одном месте очень много путаницы.
Подробнее здесь: https://stackoverflow.com/questions/449 ... -confusion
Мобильная версия