拷贝构造与拷贝赋值
来源:互联网 发布:vendor.bundle.js 位置 编辑:程序博客网 时间:2024/05/18 01:02
区别:
拷贝构造函数用来初始化对象;
而拷贝赋值用来把已经初始化过的对象进行赋值。
代码:
Sales_data类中的拷贝构造函数和拷贝赋值运算符定义如下:
//Sales_data类的拷贝构造函数定义Sales_data::Sales_data(const Sales_data &orig): bookNo(org.bookNo), //使用string的拷贝构造函数 units_sold(orig.units_sold), //拷贝orig.units_sold revenue(orig.revenue) //拷贝orig.revenue { } //空函数体//Sales_data类的拷贝赋值运算符定义:Sales_data&Sales_data::operator=(const Sales_data &rhs){ bookNo = rhs. //使用string::operator= units_sold = rhs.units_sold; //使用内置的int赋值 revenue = rhs.revenue; //使用内置的double赋值 return *this; //返回一个此对象的引用}
若一个类未定义自己的拷贝构造函数或拷贝赋值运算符,编译器就会为它生成一个“合成拷贝构造函数”和“合成拷贝赋值运算符”,如上面代码所示。
代码形式区别:
拷贝构造函数
既然是构造函数,所以没有返回类型;参数类型是常量引用,常量是因为不会改变实参,引用是为了防止拷贝构造函数被无限调用;
拷贝赋值运算符
返回类型为指向其左侧运算对象的引用,因为函数结果本身是左侧对象;参数类型也是常量引用,常量是因为不会改变实参(即等号右边的值),引用是为了减少一次调用拷贝构造函数,提高效率;
三/五法则:
如果一个类需要自定义析构函数,几乎可以肯定它也需要自定义拷贝赋值运算符和拷贝构造函数
如果一个类需要自定义拷贝构造函数,那么也需要自定义拷贝赋值运算符,反之亦然。然而无论是需要拷贝构造函数还是拷贝赋值运算符都不必然意味着也需要析构函数。
参考:《C++ Primer》
阅读全文
0 0
- 拷贝构造与拷贝赋值
- 拷贝构造函数 与 拷贝赋值函数
- Cpp_拷贝构造与拷贝赋值
- C++之拷贝构造与拷贝赋值
- 拷贝构造与赋值函数
- 拷贝构造函数与赋值函数;深拷贝,浅拷贝
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 构造、拷贝构造、赋值
- 拷贝构造 赋值构造
- 拷贝构造和拷贝赋值
- 拷贝构造与拷贝赋值运算符几点摘记
- 拷贝构造函数与拷贝赋值操作符
- C++中拷贝构造函数与拷贝赋值操作符
- java编写菱形
- Interleaving Positive and Negative Numbers
- python关于argparse模块的学习内容
- 有根树的同构vijos
- Linux-Ubuntu软件的安装方法
- 拷贝构造与拷贝赋值
- 信息系统开发思维导图
- Error Domain=NSURLErrorDomain Code=-1100 "(null)"
- MATLAB编译C++问题(MEX文件)
- linux--基本指令
- 启动Hbase后Hmaster节点挂掉的几个原因
- 处理高并发、大数据存储的网站技术架构
- bzoj 3329: Xorequ
- Struts 2中<s:bean>标签的用法