=号是缺省的位拷贝函数吗?

xxb51357 2003-08-19 05:00:07
CMyClass a;
CMyClass b;
a=b;//其中=号我没有重载,居然也能编译通过,是不是=号是通用(对于任意类
//型,包括自定义类)的位拷贝函数
...全文
19 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RookieStar 2003-08-23
  • 打赏
  • 举报
回复
看看Scott Meyers的Effective C++吧!
yzb1000 2003-08-22
  • 打赏
  • 举报
回复
学习
nirvana_li 2003-08-22
  • 打赏
  • 举报
回复
在你没有显式的使用operato=(),编译器会自动的生成一个。 steedhorse(晨星) 讲的我完全赞成……
cdxiaogan 2003-08-19
  • 打赏
  • 举报
回复
没有重载时系统默认是按位拷贝的
结果是a和b 是两个值完全相同的对象,但其它方面还是完全独立的
如果b中还有指针会引起副作用
修改指针所指对象时会同时影响两个对象
这时就需要重载"=" 来绕过默认按位复制了
晨星 2003-08-19
  • 打赏
  • 举报
回复
如果类没有显式定义拷贝构造函数,那么编译器将生成一个默认的拷贝构造函数,所完成的功能仅仅是简单的逐字段拷贝。
如果类没有显式重载赋值运算符,那么编译器也将生成一个默认的,也是进行逐字段拷贝。

所以,如果类的结构较复杂,特别当需要分配堆内存时,要么应该自己定义拷贝构造函数与赋值运算符,来进行安全、干净的拷贝和初始化等动作,要么应把拷贝构造函数和赋值运算符声明成私有,从而禁止拷贝和赋值。
而如果类的结构比较简单,各个成员变量都是简单类型,那么则应该提倡使用默认的拷贝构造函数和赋值运算符,因为这样就足够了,而且不必每次改动类的内部实现时都要修改拷贝构造函数和赋值运算符。
神农氏 2003-08-19
  • 打赏
  • 举报
回复
在c语言中就有了,在两个struct之间可以用=赋值。按字节拷贝
tomsx 2003-08-19
  • 打赏
  • 举报
回复
可能你没有自定义拷贝构造函数,编译器遇到按值传递就会自动调用拷贝构造函数,比如你这里用到的=号,虽然你没有做什么,但编译器必需保证能运行下去,所以它就按默认的情况做按位拷贝。
我个人认为拷贝构造函数在编译器里的内部实现也是通过符号重载完成的,符号重载相对于拷贝构造函数可能更底层一些吧。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧