Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Запретить конструктор копирования и оператор присваивания

#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 };

Комментариев нет:

Отправить комментарий