#include<bits/stdc++.h> using namespace std; class Student { private: int ID; char *name; public: Student(const Student &x) { ID=x.ID; name=x.name;//能不能理解为直接把内容存在了name本身上,而new写法name还是存地址;~A /*name=new char[strlen(x.name)+1]; //~B strcpy(name,x.name);*/ } Student(int x=1,char *n="xxx")//可以思考一下为什么这里没有赋给形参一个地址; { ID=x; name=n;//~A /*name=new char[strlen(n)+1];//B strcpy(name,n);*/ } ~Student(){ cout<<name<<endl; cout<<"end"<<endl; delete []name; } void display() { cout<<ID<<endl<<name<<endl<<endl; } }; int main() { Student A(1001,"wang xiaojie"); A.display(); Student B(A); Student C; B.display(); C.display(); return 0; }
运行结果:
A+A or B+B(程序中的代号A、B) 结果理论上应该正确,A+B则输出有问题。。。
Last:深复制主要还是在对数组、指针等含这些较复杂的数据类
型操作时使用。