我对这个复制构造函数是对的,还是他们骗我?

nhr*_*ic6 -2 c++

说你有班级学生:

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并且两个指针指向同一个东西吗?

Wyz*_*a-- 5

最初,在复制之后,两个对象的_name指针都指向内存中的相同字符串.但是,当你调用setName,它分配一个新的字符串,用不同的内容,并设置s1_name以指向代替.所以最后,两个对象引用不同的字符串.