gpt4 book ai didi

c++ - 为什么 C++ 编译器在类具有引用成员时不删除复制构造函数?

转载 作者:行者123 更新时间:2023-11-30 01:34:18 25 4
gpt4 key购买 nike

<分区>

C++ 编译器不会为具有引用成员的类(以及其他一些场景)提供默认的复制赋值运算符。原因是,如果提供了默认复制赋值运算符,则源对象和目标对象的引用成员都引用相同的拷贝。

但是,在相同的场景中提供了默认复制构造函数,这引入了与提供默认复制赋值运算符相同的问题。

提供默认复制构造函数的原因是什么?

#include <iostream>
using namespace std;

class People{
public:
People(string name = ""):m_name(name){
}
string getName(){
return m_name;
}
void setName(string name){
m_name = name;
}
private:
string& m_name;//reference member
};

int main() {
People a("Erik");
People b(a);
a.setName("Tom");
cout << a.getName() << endl;//This prints "Tom"
cout << b.getName() << endl;//This prints "Tom"
//a = b; //Build error
return 0;
}

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