#cpp #конструктор
Если в базовом классе запретить конструктор копирования и оператор присваивания, нужно ли в производных классах делать то же самое?
Ответы
Ответ 1
Это делать не обязательно. Например есть вспомогательный класс boost::non_copyable который используется чтобы запретить копирование. Однако, при попытке копирования в сообщении об ошибке будет написано только про boost::non_copyable, но не про класс-наследник, что затруднит понимание в каком именно месте произошла ошибка. Поэтому лучше запрещать копирование явно, в классе-наследнике. Рекомендуемый способ - это =delete; struct X { X(const X&) = delete; X& operator=(const X&) = delete; }; Если код компилируется для С++03, то конструктор и оператор присваивания надо объявить в private секции, и не определять. Тогда будет либо ошибка компиляции (из за private), либо ошибка линковки. struct X { private: X(const X&); // noncopyable X& operator=(const X&); // noncopyable };
Комментариев нет:
Отправить комментарий