拷贝构造函数:用一个已存在的对象给另一个正在生成的对象初始化的时候自动调用的成员方法
如果没有自己实现,会自动生成一个浅拷贝的拷贝构造(影响堆上内存=>指针)
如果自己实现,就不会生成
注意:
Person(const Person& src) { cout << "Person(const Person& src)" << endl; _age = src._age; _sex = src._sex; _name = new char[strlen(src._name) + 1]; memset(_name,0, strlen(src._name) + 1); for (int i = 0; i < strlen(src._name); i++) { _name[i] = src._name[i]; } }
等号运算符重载:使用一个已存在的对象,给另一个已存在的对象赋值时自动调用的成员方法
如果不自己实现,就会自动生成一个浅拷贝的等号运算符重载
注意:
Person& operator=(const Person& src) {//等号运算符重载 返回引用 保证返回对象一定存在 cout << " void operator=(const Person& src)" << endl; //防止自赋值 if (this == &src) { return *this ; } //防止内存泄漏 delete[] _name; //防止浅拷贝 _name = new char[strlen(src._name) + 1]; memset(_name, 0, strlen(src._name) + 1); for (int i = 0; i < strlen(src._name); i++) { _name[i] = src._name[i]; } return *this; }
拷贝构造与等号运算符重载的区别:
拷贝构造是用一个已存在的对象给一个正在生成的对象初始化
等号运算符重载是用一个已存在的对象给另一个已存在的对象赋值
int a;
int c= int ();
int b(a); //拷贝构造
int d = a; //拷贝构造
c = a; //等号运算符重载