解释深浅拷贝问题,并且使用代码示例描述.

浅拷贝:指的是拷贝的文件与源文件是在同一片空间进行操作。(即指向的是同一片空间)

深拷贝:需要在堆区空间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;
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值