5. 三大函数:拷贝构造 拷贝赋值 析构函数

  • String 类

 

                 拷贝构造和拷贝赋值应该怎么写

                只要类里面带指针,一定不要用编译器的默认拷贝构造函数,一定要自己写

 

  • 三个特殊函数

 

 

          String (const char* cstr = 0); //构造传入一个指针,默认赋值为0

          String (const String& str); //以自身类型作为参数,称为拷贝构造函数

            String& operator = (const String& str); //赋值运算符重载,同事以自身作为参数,称为拷贝赋值

          只要类带着指针,一定要写这个函数

        ~String(); //析构函数 当对象死亡(离开作用域)的时候 会调用

 

  • 构造函数和析构函数

 

 

                类中如果有指针,多半要做动态分配,既然做了动态分配,做了动态分配,则要在析构函数里将分配的内存还给系统

                图中例子,离开右下角作用域的时候,要调用3次析构函数

 

  • 含指针的类必须要有拷贝构造函数和拷贝赋值函数

 

 

                如果不自己写拷贝构造函数和拷贝赋值函数,很容易造成浅拷贝

 

  • 拷贝构造函数

 

 

拷贝构造函数中应该创造一个足够的空间存放蓝本

图中蓝色的两行意思完全相同,即以s1为蓝本,创建出一个s2

调用拷贝构造函数,创造空间,将蓝本的内容拷贝过去,叫做深拷贝

 

  • 拷贝赋值函数

 

     

 

拷贝赋值操作是两个已有对象的操作

ran hous1赋值给s2,s2要先杀掉自己,然后分配一块跟s1一样大的存储空间,将s1拷贝进去,然后返回自身引用

if 语句是检测是不是自己赋值给自己,看二者的指针是不是指向同一块内存,如果不写的话,如果发生自我

赋值,则后面的语句结果会出错

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值