JJ张彬华 发表于 2013-10-20 21:15:06

新手求救

本帖最后由 JJ张彬华 于 2013-10-20 21:33 编辑

#include <iostream>
#include <string>

class Myclass
{
public:
      Myclass(int *num);
      Myclass operator=(const Myclass &ris);
      void printff();
private:
      int *numm;
} ;

Myclass::Myclass(int *num)
{
      numm = num;
}

Myclass Myclass::operator=(const Myclass &ris)
{
      if(this!=&ris)
      {
                delete numm;                                                   
                numm = new int;
                *numm = *ris.numm;
      }
      else
      {
                std::cout<<"赋值号两边一样,不给予操作\n";
      }      
}

void Myclass::printff()
{
      std::cout<<*numm<<"\n";
}

int main()
{
      Myclass obj1(new int(1));
      Myclass obj2(new int(2));
      obj1.printff();
      obj2.printff();
      
      obj1 = obj2;
      obj1.printff();
      obj2.printff();
      
      return 0;
}
既然这两对象分配的动态内存都不同了,那在重载函数中的delete numm;                                                   
                numm = new int;不是就多余了吗?求解释

peterboboo 发表于 2013-10-20 21:15:07

这个对于你这个特例来说,是可以不需要delete numm;numm = new int;但是你考虑如果numm 是个字符串指针,或者数组,就会造成内存泄露了

魔火 发表于 2013-10-21 12:21:06

对,特别是对字符串的自适应问题,原来=号右边有多大,左边的对象就重新开辟多大的存储空间,而不是依旧原来的空间

JJ张彬华 发表于 2013-10-22 20:17:59

魔火 发表于 2013-10-21 12:21 static/image/common/back.gif
对,特别是对字符串的自适应问题,原来=号右边有多大,左边的对象就重新开辟多大的存储空间,而不是依旧原来 ...

这样说是有明白一点,有没有关于这方面的资料读物吗,分享一下,谢谢
邮箱646494856@qq.com
页: [1]
查看完整版本: 新手求救