简介:拷贝构造涉及两种调用方式(显示以及隐式调用拷贝构造),同时,拷贝构造涉及两种构造方式(深浅拷贝)。
拷贝构造:拷贝构造是一种特殊的构造函数
拷贝构造:用自身这种类型的数据来构造自身。
特点:
- 在用户未定义的情况下,系统自动创建一个隐式的默认拷贝构造,它会将已存在对象中的数据成员逐个的拷贝到新创建的对象当中。
- 如果使用默认的拷贝构造,当类的数据成员指向堆区内存的时候,会拷贝指针,但不会拷贝堆内存(浅拷贝)
- 自定义拷贝来解决浅拷贝的问题(深拷贝)
浅拷贝代码学习认识:
//如果在一个对象中不包含动态内存的分配,那么它所对应的析构函数,结构体内可以不用写任何数据。 //如果所接触到的类中没有动态内存分配的数据,那么就对象建立所使用的拷贝就是简单由系统所提供的拷贝构造 //(即浅拷贝)。 //那么相对应,如果类中涉及到动态内存的分配,那么如果使用简单的拷贝构造,就会出现动态内存析构时 //出现无法争取析构的问题。所以也就为了解决这个问题,出现了深拷贝。 #include<iostream> using namespace std; class MyStu{ int id; int age; public: MyStu(int id,int age){ this->id = id; this->age = age; } ~MyStu(){ } }; int main(){ //拷贝构造两种调用方式:显示调用,以及隐式调用 cout << "拷贝构造原型:" << endl; int a(1);//拷贝构造(显示调用拷贝构造) int b = a;//拷贝构造(隐私调用拷贝构造) b = a;//赋值运算 cout << "----------------------" << endl; cout << "类的拷贝构造(浅拷贝)" << endl; MyStu s(1,20);//调用带参构造 MyStu s1(s);//显示调用拷贝构造 MyStu s2 = s1;//隐式调用拷贝构造 return 0; }