Правило нулевой путаницы?C++

Программы на C++. Форум разработчиков
Anonymous
Правило нулевой путаницы?

Сообщение Anonymous »

Итак, я читал о Правиле Ноля.

Упрощенная версия: Я не понимаю цели этого правила. Правило трех и пяти — это своего рода «эмпирическое правило», но я не вижу «практического правила» или каких-либо других конкретных намерений в этом правиле.

Подробная версия:

Цитирую:


Классы, у которых есть пользовательские деструкторы, конструкторы копирования/перемещения или
операторы присваивания копирования/перемещения должны иметь дело исключительно с владением.
Другие классы не должны иметь собственные деструкторы, конструкторы копирования/перемещения
или операторы копирования/перемещения присваивания.


Что это значит? Что они подразумевают под владением, владением чем?
Они также показали пример кода (думаю, он связан со вступлением):

Код: Выделить всё

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

Вернуться в «C++»