Явное ключевое слово, конструктор перемещения и конструктор копирования и отключение конструктора перемещения и копирования

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

Чего я не понимаю, так это того, как явный конструктор влияет на конструкторы перемещения и копирования, и я также видел случай, когда вы можете отключить конструкторы копирования и перемещения... Зачем вам все это? Все это очень туманно для меня.


person Damir Bajramovic    schedule 08.12.2016    source источник
comment
Возможный дубликат stackoverflow.com/questions/ 25529772/ ?   -  person Rene    schedule 08.12.2016
comment
Вы бы отключили копирование, потому что копировать объекты класса может быть нелогично. Например, синглтон не должен быть копируемым.   -  person StoryTeller - Unslander Monica    schedule 08.12.2016
comment
Я спрашиваю о явном конструкторе копирования, но о явном конструкторе и о том, как он влияет на конструкторы копирования и перемещения. Это не ответ на мой вопрос, но спасибо, я это тоже прочитаю.   -  person Damir Bajramovic    schedule 08.12.2016


Ответы (1)


Конструктор явного копирования работает так же, как конструктор явного преобразования — его нельзя вызвать неявно. Единственная разница в том, из чего построен ваш объект.

Я также считаю, что варианты использования для этого чрезвычайно редки и далеки друг от друга.

Чуть более распространенным случаем является удаление конструктора копирования класса и оператора присваивания (= delete). Это полезно для объектов, которые представляют уникальный ресурс и поэтому не должны копироваться. std::cout — это пример объекта, который существует, но не должен быть скопирован.

person Bo Persson    schedule 08.12.2016