gpt4 book ai didi

c++ - move 构造函数问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:22 27 4
gpt4 key购买 nike

我有以下类(class):

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 构造函数,我就会到达复制构造函数。我不明白为什么会这样。

最佳答案

Visual C++ 2012 不会隐式生成 move 构造函数或 move 赋值运算符。

(管理 move 操作何时隐式声明和定义的规则在标准化过程中多次更改;Visual C++ 2012 不支持标准化(2011)规则集。)

关于c++ - move 构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14426579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com