拷贝构造函数(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

最新文章

  1. Python3 登陆网页并保持cookie
  2. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
  3. Course Schedule I & II
  4. ADO.NET学习系列(三)----做一个登录案例
  5. 内省—beanutils工具包
  6. api-ms-win-crt-runtime-l1-1-0.dll丢失问题
  7. HDU5045-Contest(状压dp)
  8. HDU-4593(水题)
  9. Cloud Foundry中 JasperReports service集成
  10. C#不用COM组件导出数据到Excel中
  11. Android4.0新增的网格布局
  12. 终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐
  13. Golang 入门 : 配置代理
  14. Oracle删库跑路
  15. instruments symbol name 不显示函数名!
  16. 关于Bootstrap fileinput 上传新文件,移除时触发服务器同步删除的配置
  17. spring初识
  18. python学习之----正则表达式
  19. Python staticmethod classmethod 普通方法 类变量 实例变量 cls self 概念与区别
  20. 推文《阿里凑单算法首次公开!基于Graph Embedding的打包购商品挖掘系统解析》笔记

热门文章

  1. JVM探秘:GC日志收集与分析
  2. 「BZOJ1385」「Baltic2000」Division expression 解题报告
  3. Codeforces Round #524 (Div. 2)(前三题题解)
  4. 用python做推荐系统(二)
  5. Python 愤怒的小鸟代码实现:物理引擎pymunk使用
  6. windows生成github密钥并推送文件踩坑
  7. bash的默认组合键
  8. C#反射与特性(七):自定义特性以及应用
  9. Date类(java.util)和SimpleDateFormat类(java.text)
  10. CTPN中anchors代码