я прочитал в общепринятом ответ here что:Является ли явное перемещение ctor устранением неявной копии ctor?
[а] конструктор копирования и копирования оператор присваивания не будет сгенерирован для класса, который явно декларирует MOVE конструктору или оператор присваивания шаг
Я замечаю (g ++ 4.7.2), что если вы определяете конструктор перемещения, он будет использоваться, например, с push_back()
, тогда как если вы все сделаете, то это будет конструктор копирования, вы не получите неявный конструктор перемещения - - вы получите сообщение об ошибке. [... которая заставляет меня задаться вопросом, какой из них (перемещение или копирование) фактически используется, если вы ничего не делаете явно ...]
Однако this online reference не делает те же заверяла о копии конструктор не неявно определяется при определении конструктора перемещения.
Итак, мой вопрос в том, является ли первая цитата гарантированной стандартом (включая "или")? Я бы предпочел, чтобы некоторые классы, которые нуждались в явном деструкторе, выполнили «правило пяти» с помощью только конструктора перемещения и оператора (удаляемого) перемещения и полагались на неявные методы копирования , а не. Если я не могу положиться на это, тогда мне придется явно указать =delete
, но это много потенциально избыточных вещей.
В этом онлайновом справочнике говорится, что «неявный конструктор копирования для класса T не будет сгенерирован, если выполнено одно из следующих условий:» ... «T имеет определяемый пользователем конструктор перемещения или операцию перемещения оператора». Возможно, формулировка может потребовать полировки ... теперь она говорит: «определяется как удаленный, если» – Cubbi