社区
C语言
帖子详情
菜鸟我在看《C++大学教程》的疑问:对象的自我赋值会有什么危害呢?能举例说明一下吗?
mxic
2002-09-30 04:14:21
问题同上。
...全文
80
13
打赏
收藏
菜鸟我在看《C++大学教程》的疑问:对象的自我赋值会有什么危害呢?能举例说明一下吗?
问题同上。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kxw
2002-10-11
打赏
举报
回复
class T
{
public:
.......
private:
int member;
};
const T& operation= (const T& rhs)
{
if(*this == rhs )
return *this;
member = rhs.member
}
看一下,effective c++ item 16
===================================================================
我的心太乱
fangrk
2002-10-08
打赏
举报
回复
所以自己写复制构造函数是要加上一段
obj&
obj:: operator=(const obj&rhs)
{
if(&rhs!=this) return *this;
......
}
fangrk
2002-10-08
打赏
举报
回复
自我赋值没问题的,一般说来operator =都会检查是否是自我赋值,如果是的话直接返回的。
fangrk
2002-10-08
打赏
举报
回复
自我赋值没问题的,一般说来operator =都会检查是否是自我赋值,如果是的话直接返回的。
北极猩猩
2002-10-08
打赏
举报
回复
所以自己写复制构造函数是要加上一段
if(des!=*this){
//...
}
ycqdq
2002-10-08
打赏
举报
回复
是不是就会出一个空的值啊?我也在学习啊.
anyoshon
2002-10-08
打赏
举报
回复
一般是没有问题的.
不过,自己写的话,必须知道这一点.
mxic
2002-10-01
打赏
举报
回复
也就是说对含有指针成员变量的类来说,需要在程序里要重载赋值运算符,对吗?
waterstony
2002-10-01
打赏
举报
回复
而且记得要检查是否是自我赋值。
leasun
2002-09-30
打赏
举报
回复
自我赋值前会先delete lhs
waterstony
2002-09-30
打赏
举报
回复
判断自我赋值对含有指针成员变量的类来说尤其重要。
举一例子
class String{
...
private:
char* pt;//指向字符串的指针
...
}
String sa,sb;
sa = 'abcd';
sb = 'efghijkl';
sa = sb;
赋值的简要流程是这样的:先做this判断,再把sa的内容清空(delete pt),然后new出一块跟sb一样大小的区域,并把sb的东西拷进这块空间,最后sa的内容就是'efghijkl'了。
如果不作this判断,那么当sa = sa时,先作了delete pt,sa的内容都没有了,后面的步骤都做不下去了。
要想知道得更多,看effective c++。
mxic
2002-09-30
打赏
举报
回复
ashchan((www.ashchan.com)) :
您所说的“删除”操作是在编译/运行时自动发生的吗?还有当:
在类的定义时给出/不给出重载的赋值运算符以及复制构造函数时,会有什么不同?
这些问题我不是很清楚,书上也交代的不明确。
ashchan
2002-09-30
打赏
举报
回复
一般的赋值操作,会先把将被赋值的对象(lhs)删除掉,然后将要赋值给它的对象(rhs)的内容通过特定方法赋给lhs;如果是自我赋值,则lhs与rhs是同一个,当删除lhs时,也同时删除了rhs(本来它们就是同一个对象),这样当再将rhs的内容赋给lhs时,就出问题罗(不用我说你也知道了吧)。
C++
语言
教程
(详解,
会
更新)——第4篇:
C++
变量的那些事儿
这一篇是系列的第四篇,将带领大家了解
C++
变量的声明,
赋值
,和输入输出。有志者,就来吧!
【北京
大学
C++
程序设计学习】——
菜鸟
的基础过关——从C走进
C++
写在前面 唯一算是有点遗憾的事情吧,当初研一就应该过一遍的,但是一直拖着,每个月学一点,结果到现在就一直原地踏步,这些东西是躲不过的,做好自己吧。 从C走进
C++
1. 函数指针 每个函数占用一段连续的内存,函数名就是该函数的起始地址(入口地址),将该入口地址赋给一个 指针变量————————函数指针! 可以通过该指针变量调用这个函数。 2. 命令行参数 这个太简单,就不说了,就...
【北京
大学
C++
程序设计学习】——
菜鸟
的基础过关——类和
对象
写在前面 通过第一单元的梳理后现在觉得基本的框架是有了,也清晰了很多!加油,东西是死的,人是活的! 1.内联成员函数和重载成员函数
视频
教程
-
C++
语言基础视频
教程
-C/
C++
C++
语言基础视频
教程
烟台
大学
计算机学院教师,近二十年教书生涯,看出了在错...
Python
菜鸟
教程
day1
Python
菜鸟
教程
(1)python的历史及概况python的起源python的诞生python是什么编程语言python的优缺点优点缺点python的基础数据类型标准数据类型数据类型的强制转换Python数字变量和常量常见的数学函数随机函数python的运算符算术运算符比较运算符
赋值
运算符位运算符逻辑运算符成员运算符身份运算符 python的历史及概况 python的起源 Python...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章