copy constructor和copy assignment operator的区别
2024-10-08 07:46:59
拷贝构造函数(copy constructor)被用来以一个对象来初始化同类型的另一个对象,拷贝赋值运算符(copy assignment operator)被用来将一个对象中的值拷贝到同类型的另一个对象中:
class Widget { public: Widget(); // default constructor Widget(const Widget& rhs); // copy constructor Widget& operator=(const Widget& rhs); // copy assignment operator ... }; Widget w1; // invoke default constructor Widget w2(w1); // invoke copy constructor w1 = w2; // invoke copy // assignment operator |
当你看到什么东西看起来像一个赋值的话,要仔细阅读,因为 "=" 在语法上还可以被用来调用拷贝构造函数:
Widget w3 = w2; // invoke copy constructor! |
幸运的是,拷贝构造函数很容易从拷贝赋值中区别出来。如果一个新的对象被定义(就象上面那行代码中的 w3),一个构造函数必须被调用;它不可能是一个赋值。如果没有新的对象被定义(就象上面那行 "w1 = w2" 代码中),没有构造函数能被调用,所以它就是一个赋值。
拷贝构造函数是一个特别重要的函数,因为它定义一个对象如何通过传值的方式被传递。例如,考虑这个:
bool hasAcceptableQuality(Widget w); ... Widget aWidget; if (hasAcceptableQuality(aWidget)) ... |
参数 w 通过传值的方式被传递给 hasAcceptableQuality,所以在上面的调用中,aWidget 被拷贝给 w。拷贝动作通过 Widget 的拷贝构造函数被执行。通过传值方式传递意味着“调用拷贝构造函数”。(无论如何,通过传值方式传递用户定义类型通常是一个不好的想法,传引用给 const 通常是更好的选择。)
文章引用自:http://dev.yesky.com/326/2070326.shtml
最新文章
- Python3 登陆网页并保持cookie
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
- Course Schedule I &; II
- ADO.NET学习系列(三)----做一个登录案例
- 内省—beanutils工具包
- api-ms-win-crt-runtime-l1-1-0.dll丢失问题
- HDU5045-Contest(状压dp)
- HDU-4593(水题)
- Cloud Foundry中 JasperReports service集成
- C#不用COM组件导出数据到Excel中
- Android4.0新增的网格布局
- 终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐
- Golang 入门 : 配置代理
- Oracle删库跑路
- instruments symbol name 不显示函数名!
- 关于Bootstrap fileinput 上传新文件,移除时触发服务器同步删除的配置
- spring初识
- python学习之----正则表达式
- Python staticmethod classmethod 普通方法 类变量 实例变量 cls self 概念与区别
- 推文《阿里凑单算法首次公开!基于Graph Embedding的打包购商品挖掘系统解析》笔记
热门文章
- JVM探秘:GC日志收集与分析
- 「BZOJ1385」「Baltic2000」Division expression 解题报告
- Codeforces Round #524 (Div. 2)(前三题题解)
- 用python做推荐系统(二)
- Python 愤怒的小鸟代码实现:物理引擎pymunk使用
- windows生成github密钥并推送文件踩坑
- bash的默认组合键
- C#反射与特性(七):自定义特性以及应用
- Date类(java.util)和SimpleDateFormat类(java.text)
- CTPN中anchors代码