说你有班级学生:
class Student{
char *_name;
Student(char *name){
_name = new char[strlen(name)+1];
strcpy(_name, name);
}
void setName(char *name){
_name = new char[strlen(name)+1];
strcpy(_name, name);
}
char* getName(){return _name;}
}
Run Code Online (Sandbox Code Playgroud)
现在,它只是一个基础课程.当我这样做:
Student s("Mike");
Student s1 = s; // calls default copy constructor
s1.setName("Bruce");
cout << s.getName();
cout << s1.getName();
Run Code Online (Sandbox Code Playgroud)
他们现在不应该被称为Bruce,因为复制构造函数将地址复制到源char并且两个指针指向同一个东西吗?
最初,在复制之后,两个对象的_name指针都指向内存中的相同字符串.但是,当你调用setName,它分配一个新的字符串,用不同的内容,并设置s1的_name以指向代替.所以最后,两个对象引用不同的字符串.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |