拷贝构造函数:特殊的构造函数,用户未定义拷贝函数的情况下,系统自动创建一个隐式的默认拷贝构造函数,它将已经存在的对象中的数据成员逐个的拷贝到新创建的对象中。
自定义拷贝构造函数格式: 类名(const 类名 & 引用名)
会调用拷贝函数的三种情况:
(1)使用一个类对象出初始化另一个类的对象
(2)使用类的对象作为函数的形参,调用函数时
(3)函数的返回值为类的对象时
什么情况下要重写拷贝构造函数:当类中含有指针成员变量时。
浅拷贝:对象a与b中的指针成员变量指向同一个地址,就是浅拷贝。对对象a进行操作时,对象b也会受影响
如果我们使用对象a对b进行初始化时,使用默认的拷贝构造函数就会出现浅拷贝的问题,所以需要我们重写拷贝构造函数。
深拷贝:对象a与对象b中指针成员变量指向不同的地址,但是它们的值是相同的,完成拷贝的同时,a与b也不会影响彼此
看完下面的代码试着运行就会懂了
#include <iostream> using namespace std; class CA{ public: int a; int *p; CA(){ a = 1; p = &a; } CA(const CA& temp){ cout << "调用拷贝构造" << endl; this->a = temp.a; this->p = new int(*temp.p);//深拷贝 //this->p=*temp.p;//浅拷贝 } }; int main() { CA ca1; CA ca2 = ca1; cout << "ca1: " << ca1.a << " " << *ca1.p <<endl; cout << "ca2: " << ca2.a << " " << *ca2.p <<endl; ca1.a = 2; cout << "ca1: " << ca1.a << " " << *ca1.p << endl; cout << "ca2: " << ca2.a << " " << *ca2.p << endl; return 0; }
C++ 拷贝(复制)构造函数详解
猜你喜欢
转载自blog.csdn.net/love_phoebe/article/details/99328584
今日推荐
周排行