C++笔记(五)

1.深浅拷贝

  • 如果一个类中有指针,那么就意味着有类外资源(内存)存在
  • 需要考虑深浅拷贝的问题
  • 必须重写析构函数

2. 默认浅拷贝:

  • . 只复制指针,没复制真正的内存
class A
{	
     int size;
     int *p;

public:
    A(const A &r)
    {
        size=r.size;
        // 默认浅拷贝: 只复制指针,没复制真正的内存
        p = r.p;    
    }

    // 3,赋值操作符函数
    // 赋值操作符函数会默认将所有的类成员复制一份
    A & operator=(const A &r)
    {
        // 浅拷贝
       size = r.size;
       p = r.p;
       return *this;
    }

};

3.深拷贝:

  • 复制真正的内存
class A
{
    int size;

    // 如果一个类中有指针,那么就意味着有类外资源(内存)存在
    // 此时需要注意几点:
    // 1,需要考虑深浅拷贝的问题
    // 2,必须重写析构函数
    int *p;

public:
    // 类中默认就有的东西:
    // 1,无参构造函数
    A(){}

    A(int s):size(s){p = new int[size];}
    ~A(){delete [] p;}

    // 2,拷贝构造函数(即参数为本类对象的构造函数)
    // 拷贝构造函数会默认将所有的类成员复制一份
    A(const A &r)
    {
        size = r.size;

        // 默认浅拷贝: 只复制指针,没复制真正的内存
//        p = r.p;

        // 深拷贝: 复制真正的内存
        p = new int[size];
        memcpy(p, r.p, size*sizeof(int));
    }

    // 3,赋值操作符函数
    // 赋值操作符函数会默认将所有的类成员复制一份
    A & operator=(const A &r)
    {
        // 浅拷贝
//        size = r.size;
//        p = r.p;

        // 深拷贝
        size = r.size;

        delete [] p;
        p = new int[r.size];
        memcpy(p, r.p, size*sizeof(int));

        return *this;
    }
};

3.this 指针

  • 任何类方法,都有一个默认的隐藏指针: this
  • this指针就指向调用该类方法的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值