大家好,我研究复制构造函数有一段时间了,在一个网站上遇到这样一句话。
当bitwise(赋值运算符)赋值被执行时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象上。所以后来我试着研究一下,看看是不是这样,我写了一些简单的代码,如下。
class Base{
public:
Base(int age, string name) :age(age), name(name) {};
Base() {};
void display() {
cout << age;
}
int age;
string name;
};
int main() {
Base b1(5, "Alek"),b2;
b2 = b1;
b1.display();
b2.age = 10;
b1.display();
system("pause");
所以根据上面所写的内容,第二遍的呼唤 b1.display() 必须有10的值吗,但为什么还是显示同样的结果?
复制构造函数的工作原理是将一个对象的所有值复制到另一个对象中。
使用你的Base类,所有的成员变量都被复制到一个对象中。b2
当copy构造函数被调用时。
唯一的麻烦是当类中有指针时,可以考虑将其替换为 int age;
与 int* age;
当调用复制构造函数时,b2的年龄变量将指向与b1的年龄变量相同的内存。
指针本身如果被复制,但不包括存储在指针位置的动态内存数据。