浅拷贝:指的是拷贝的文件与源文件是在同一片空间进行操作。(即指向的是同一片空间)
深拷贝:需要在堆区空间new一个新空间,来存放要拷贝的内容。(即操作的是两片空间)
代码如下:
/**************************************************************
* File Name : copy.cpp
* Creator : 王 * 一
* QQ : 2366480389
* Email : 2366480389@qq.com
* Creat Time : Sat 03 Sep 2022 05:07:41 PM CST
* 备注 :
***************************************************************/
#include <iostream>
using namespace std;
class person
{
public:
person()
{
cout << "构造函数" << endl;
}
person(int age,string name)
{
h_age = age;
h_name = new string(name); //在堆区开辟一片空间,区分深浅拷贝
cout << "带参构造" << endl;
}
person(const person &p)
{
h_age = p.h_age;
h_name = new string(*p.h_name);
cout << "拷贝构造" << endl;
}
~person()
{
delete h_name; //释放堆区空间
h_name = NULL;
cout << "析构函数" << endl;
}
int h_age;
string* h_name;
};
void test1()
{
person p1(18,"yasuo");
cout << "p1.age: " << p1.h_age << endl;
cout << "p1_name: " << *p1.h_name << endl;
cout << &p1.h_age << endl; // 浅拷贝地址
cout << &(*p1.h_name) << endl; //深拷贝地址
person p2(p1);
cout << "p2_age: " << p2.h_age << endl;
cout << "p2_name: " << *p2.h_name << endl;
cout << &p2.h_age << endl; //浅拷贝地址
cout << &(*p2.h_name) << endl; //深拷贝地址
}
int main(int argc, char *argv[])
{
test1();
return 0;
}