Общий шаблон в C++, чтобы сделать копию конструктора частных:Является ли частный конструктор перемещения для предотвращения перемещения?
class A
{
public:
// ...
private:
A(const A&);
};
Но будет следующий код затем скомпилировать (в C++ 11/14):
A f();
auto a = f();
Стандарт содержит информацию об автоматическом создании конструкторов перемещения. Я не имею доступа к стандарту или компилятору, который на самом деле генерирует конструкторы перемещения. Мой вопрос: должен ли я писать
class A
{
public:
// ...
private:
A(const A&);
A(const A&&);
};
, чтобы предотвратить перемещение также (и операторов = аналогично)?
Если вы пишете конструктор копирования, он не создает конструктор перемещения. –
Пользовательский экземпляр ctor предотвращает генерацию элементов перемещения. – Xeo
Обратите внимание, что шаблон, на который вы ссылаетесь, предназначен для C++ 98/03, но теперь устарел на C++ 11 благодаря возможности 'delete' конструкторов/операторов присваивания (например,' ClassName (ClassName &&) = delete; 'явно запретить неявный конструктор перемещения). – syam