Правило нулевой путаницы?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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