VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 170|回复: 1

《实用C++》第38课中运算符重载编译错误问题(详见帖子内容)

[复制链接]
63_avatar_middle
最佳答案
1 
donate_vip 发表于 2019-10-28 15:30:30 | 显示全部楼层 |阅读模式

运算符重载函数代码:
  1. CAnimal& CAnimal::operator=(const CAnimal&anim)
  2. {
  3.         sex = anim.sex;
  4.         ID = anim.sex;
  5.         num = anim.sex;

  6.         if (p_name)                  //判断是否指针变量是否为空,不为空则释放且清空
  7.         {
  8.                 delete[] p_name;
  9.                 p_name = NULL;
  10.         }

  11.         int name_len = strlen(anim.p_name + 1);  //判断要赋值的对象字符长度+ 1个字节空间准备存放 0
  12.         p_name = new char[name_len];                        //根据 字符长度 new 一个内存空间
  13.         memset(p_name, 0, name_len);                        //初始化内存空间 将所有字节 都为 0,让最后一个字符为0
  14.         strcpy(p_name, anim.p_name);                        //将要赋值的对象的字符串拷贝到新的对象

  15.         return *this;    //this是对象的指针 ,而 *号的意思是 给指针赋值,这里明显不是这个意思
  16.         //那么请问这里是表示什么?
  17.         //return *this;        就是返回当前对象。因为成员函数中this就是当前对象指针,解引用也就是获取当前对象。


  18. }
复制代码


析构函数里面的代码

  1. CAnimal::~CAnimal()   //析构函数
  2. {
  3.         //if (p_name)
  4.         //{
  5.         //        delete []p_name;  //释放p_name空间
  6.         //       
  7.         //}

  8.         cout << "My ~CAnimal" << endl;
  9. }
复制代码


如果不注释掉析构函数里的,释放代码,就会出错,如下图:
《实用C++》第38课中运算符重载编译错误问题(详见帖子内容)

与之前没有运算符重载函数不同的是,这里第1次执行析构函数就出错了。
没用运算符重载函数的出错是第2次执行析构函数才出错的。
且出错的提示结果也是不同的,如下图
《实用C++》第38课中运算符重载编译错误问题(详见帖子内容)

请问这其中的原因是什么?





上一篇:socket传输远程服务列表
下一篇:指针这个绕不明白了 求大佬解答
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-10-28 15:56:23 | 显示全部楼层
main 函数中调用的代码看一下,不然不太好确定
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-23 16:57

Powered by CcTry.CoM

© 2009-2020 cctry.com

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