鱼C论坛

 找回密码
 立即注册
查看: 2876|回复: 3

新手求救

[复制链接]
发表于 2013-10-20 21:15:06 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 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;
}
图片1.png 既然这两对象分配的动态内存都不同了,那在重载函数中的  delete numm;                                                     
                numm = new int;不是就多余了吗?求解释  

最佳答案

查看完整内容

这个对于你这个特例来说,是可以不需要delete numm; numm = new int;但是你考虑如果numm 是个字符串指针,或者数组,就会造成内存泄露了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-20 21:15:07 | 显示全部楼层
这个对于你这个特例来说,是可以不需要delete numm;  numm = new int;但是你考虑如果numm 是个字符串指针,或者数组,就会造成内存泄露了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-21 12:21:06 | 显示全部楼层
对,特别是对字符串的自适应问题,原来=号右边有多大,左边的对象就重新开辟多大的存储空间,而不是依旧原来的空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-22 20:17:59 | 显示全部楼层

这样说是有明白一点,有没有关于这方面的资料读物吗,分享一下,谢谢
邮箱646494856@qq.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表