社区
C语言
帖子详情
菜鸟我在看《C++大学教程》的疑问:对象的自我赋值会有什么危害呢?能举例说明一下吗?
mxic
2002-09-30 04:14:21
问题同上。
...全文
55
13
打赏
收藏
菜鸟我在看《C++大学教程》的疑问:对象的自我赋值会有什么危害呢?能举例说明一下吗?
问题同上。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++
在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。函数名功能thread()构造一个线程
对象
,没有关联任何线程函数,即没有启动任何线程构造一个线程
对象
,并关联线程函数fn,args1,args2,…为线程函数的 参数。
c++
开发 高质量 面试题分享
UML
对象
图、时序图、活动图 、状态图、协作图 、包图、组件图及部署图目录
对象
图时序图活动图状态图协作图包图组件图部署图
对象
图
对象
图是类图的一个实例,用于显示系统执行时的一个可能的快照,即在某一个时间上系统可能出现的样子,
对象
图用带下划线的
对象
名称来表示
对象
.表现
对象
的特征
对象
图展现了多个
对象
的特征及
对象
之间的交互时序图
对象
:时序图中
对象
使用矩形表示,并且
对象
名称下有下划线将
对象
置于时序图的顶部说明在交互开始时
对象
就已经存在了。gdb是一种常用的调试器,它可以用来调试多线程程序中的某个线程中的某个函数。
C#40000字全套精华
教程
,从入门到精通,一篇就够了:)
本文摘选自
菜鸟
教程
,csdn,以及本人学习的笔记资源,如果遇到显示或者格式其他问题可以直接查看pdf文件
编写合格的C代码(1):通过编译选项将特定警告视为错误
目录 快速设定 向错误的执念开炮,向C编译器开炮 编译警告应当被忽略吗?warning不重要吗? (1)编库时调用了未定义函数(非编译器内置函数),编译只报warning;链接该库时报error (2)编库时调用了未定义函数(编译器内置同名函数),编译只报warning;链接该库时报error (3)编可执行时.c代码中使用了未定义的函数(编译器内置同名函数) (4)编可执行时.c代码中...
从
菜鸟
的角度讲解JAVA虚拟机
部分转自https://blog.csdn.net/liyang_nash/article/details/787426231.JAVA虚拟机的定义: 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟...
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章