私は次のクラスを持っています:
class Student
{
private:
std::string firstName;
std::string lastName;
public:
Student():firstName(""), lastName("")
{
}
Student(const std::string &first, const std::string &last)
:firstName(first), lastName(last)
{
}
Student(const Student &student)
:firstName(student.firstName), lastName(student.lastName)
{
}
Student(Student &&student)
{
firstName=std::move(student.firstName);
lastName=std::move(student.lastName);
}
// ... getters and setters
};
私はそれを次のように使用します:
std::vector<std::shared_ptr<Student>> students;
std::shared_ptr<Student> stud1 = std::make_shared<Student>("fn1","ln1");
students.push_back(stud1);
Student stud2("fn2","ln2");
students.push_back(std::make_shared<Student>(std::move(stud2)));
私が読んだことから、moveコンストラクターはコンパイラーによって自動的に生成されます。今、この行に足を踏み入れるstudents.push_back(std::make_shared<Student>(std::move(stud2)));
と、moveコンストラクターに到達します。これで問題ありません。
その行に足を踏み入れたときにmoveコンストラクターをコメントアウトすると、copyコンストラクターに到達します。なぜこれが起こっているのか分かりません。