2016-12-08 12 views
0

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

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

+0

Возможный дубликат http://stackoverflow.com/questions/25529772/explicit-copy-constructor-and-stdsort?rq=1? – Rene

+0

Вы отключили бы копирование, поскольку копирование объектов класса может быть нелогичным. Например, Singleton's нельзя копировать. – StoryTeller

+0

Я спрашиваю о явном конструкторе копирования, но о явном конструкторе и о том, как он влияет на конструкторы копирования и перемещения. Это не отвечает на мой вопрос, но спасибо, я тоже это прочитаю. –

ответ

0

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

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

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