移动构造函数 - 默认构造函数VS 2013的无效类型

NJM*_*JMR 25 c++ c++11 visual-studio-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;
}
Run Code Online (Sandbox Code Playgroud)

Student::Student(Student&& )当我尝试编译时,我得到" :不是可以默认的特殊成员函数"...

任何人都可以解释我为什么会收到此错误?

Rog*_*and 41

因为VS2013编译器不支持默认的移动构造函数.

请参阅MSDN中的以下注释:

Visual Studio不支持默认的移动构造函数或移动赋值运算符,因为C++ 11标准要求.有关更多信息,请参阅Support for C++ 11 Features(Modern C++)的默认和删除函数部分 .

  • 我预计,我也搜索了MSDN,但没有找到正确的链接......是的,链接下的默认和删除功能部分说明了这一点.谢谢回复. (3认同)
  • 这个答案有误导性.VS2013默认情况下_does_生成移动构造函数,但移动构造函数不能默认.他们是不同的东西. (2认同)