Move Constructor - недопустимый тип для конструктора, установленного по умолчанию VS 2013
Я читал о конструкторе перемещения, и я сделал этот код в VS 2013...
class Student
{
unique_ptr<string> pName_;
public:
Student(string name) : pName_(new string(name)) { }
~Student() { }
Student(Student&&) = default; // Here I get the error.
void printStudentName(void) { cout << *pName_ << endl; }
};
int main(void)
{
vector<Student> persons;
Student p = Student("Nishith");
persons.push_back(std::move(p));
persons.front().printStudentName();
return 0;
}
Я получаю "Student::Student(Student&& )
: не является специальной функцией-членом, которую можно использовать по умолчанию", когда я пытался ее скомпилировать...
Может кто-нибудь объяснить мне, почему я получаю эту ошибку?
Ответы
Ответ 1
Поскольку компилятор VS2013 не поддерживает конструкторы перемещения по умолчанию.
Обратите внимание на следующее примечание от MSDN:
Visual Studio не поддерживает конструкторы перемещения по умолчанию или операторы переадресации как стандартные мандаты С++ 11. Для большего информации, см. раздел "По умолчанию" и "Удаленные" Поддержка возможностей С++ 11 (современный С++).