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

时间:2014-07-04 12:07:51

标签: 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;
}

我得到&#34; Student::Student(Student&& ):不是可以默认的特殊成员函数&#34;当我试图编译它时......

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

1 个答案:

答案 0 :(得分:38)

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

请参阅以下说明from MSDN

  

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