社区
C语言
帖子详情
菜鸟我在看《C++大学教程》的疑问:对象的自我赋值会有什么危害呢?能举例说明一下吗?
mxic
2002-09-30 04:14:21
问题同上。
...全文
49
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++
11下篇 + 智能指针
在
C++
11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。
C++
11中最重要的特性就是对线程进行支持了,使得
C++
在并行编程时不需要依赖第三方库,而且在...
C#40000字全套精华
教程
,从入门到精通,一篇就够了:)
本文摘选自
菜鸟
教程
,csdn,以及本人学习的笔记资源,如果遇到显示或者格式其他问题可以直接查看pdf文件
c++
开发 高质量 面试题分享
表现
对象
的特征
对象
图展现了多个
对象
的特征及
对象
之间的交互时序图
对象
:时序图中
对象
使用矩形表示,并且
对象
名称下有下划线将
对象
置于时序图的顶部说明在交互开始时
对象
就已经存在了。gdb是一种常用的调试器,它...
disabled什么意思中文翻译,js中disabled是什么意思
htaccess文件是apache服务器提供的配置文件方法,使用它可以实现针对指定目录的基础配置更改,被放置该文件...目前有以下魔术方法: __construct() __destruct() __set() ,在给不可访问属性
赋值
时,__set()
会
被调用。
从
菜鸟
的角度讲解JAVA虚拟机
部分转自...Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟...
C语言
69,368
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章