|
运算符重载函数代码:
- CAnimal& CAnimal::operator=(const CAnimal&anim)
- {
- sex = anim.sex;
- ID = anim.sex;
- num = anim.sex;
- if (p_name) //判断是否指针变量是否为空,不为空则释放且清空
- {
- delete[] p_name;
- p_name = NULL;
- }
- int name_len = strlen(anim.p_name + 1); //判断要赋值的对象字符长度+ 1个字节空间准备存放 0
- p_name = new char[name_len]; //根据 字符长度 new 一个内存空间
- memset(p_name, 0, name_len); //初始化内存空间 将所有字节 都为 0,让最后一个字符为0
- strcpy(p_name, anim.p_name); //将要赋值的对象的字符串拷贝到新的对象
- return *this; //this是对象的指针 ,而 *号的意思是 给指针赋值,这里明显不是这个意思
- //那么请问这里是表示什么?
- //return *this; 就是返回当前对象。因为成员函数中this就是当前对象指针,解引用也就是获取当前对象。
- }
复制代码
析构函数里面的代码
- CAnimal::~CAnimal() //析构函数
- {
- //if (p_name)
- //{
- // delete []p_name; //释放p_name空间
- //
- //}
- cout << "My ~CAnimal" << endl;
- }
复制代码
如果不注释掉析构函数里的,释放代码,就会出错,如下图:
与之前没有运算符重载函数不同的是,这里第1次执行析构函数就出错了。
没用运算符重载函数的出错是第2次执行析构函数才出错的。
且出错的提示结果也是不同的,如下图
请问这其中的原因是什么?
|
上一篇: socket传输远程服务列表下一篇: 指针这个绕不明白了 求大佬解答
|