实现MyString类—类和动态内存分配

     在这个类得设计和实现中,动态内存的分配和回收是一个关键的设计部分,稍有不慎,就可能造成内存泄露,当程序的运行次数上升到一定程度,内存的使用率也就越来越高,所以在关键的每一步恰当的分配和回收内存是这个类成功的关键。

      那么类得内存占用到底是怎么分配的呢?    

      静态成员变量:一般存放在另外一块内存区域,一个类只有一个静态成员副本,所以的对象一起共享它。

      每初始化一个对象,那么都会为它分配数据成员所要占用的内存空间。那么在MyString类中,我们也只是为string分配了可以存储指针的地址,并没有分配存储具体的字符串的地址。

      

   1.那么构造函数在初始化一个类对象时,必须使用new为对象分配存储字符串的内存空间,这个就是我们的动态内存分配。但是每一个new分配的内存空间必须通过delete来释放,我们一般通过析构函数来实现:

     构造函数的动态内存分配:

     

   析构函数的内存释放:

     

  2.那么在一个对象的使用过程中,通过调用其他的方法函数也会进行相应的内存的释放和重新分配:

    

    

     如上在这两个函数中,返回的对象和原来对象的字符串长度不同,那么我们就必须先释放原来的内存空间,然后让字符串指针指向合适长度的一块新的内存空间进行返回。

     注意:当重新定位字符串指针定位时,必须先释放原来的内存。

      同时在第二个赋值运算中,不能直接通过指针赋值来返回:

      delete[]string;

      string = str.string;

      return *this;

     这样的话调用对象的string和str.string指向同一块内存区域,任何一个对像先退出调用析构函数以后,当第二个对象再调用析构函数时,这个容易引起同一块内存的两次释放,引起错误

 

   总结:

   容易涉及到内存动态分配的方法函数:

   1.构造函数和析构函数

   2.赋值函数(常量或者对象),运算符重载函数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值