拷贝构造函数和移动构造函数解析
来源:互联网 发布:断开数据库所有连接 编辑:程序博客网 时间:2024/06/06 03:23
/** * by: gongzhihui * 2017.12.5 * * 拷贝构造函数调用时机: * 1. 对象作为函数参数 * 2. 对象作为函数返回值 * 3. 用一个对象初始化另一个对象: * T t1; * T t2(ti); * T t3 = t1; 此处的 = 不是赋值运算符 * * 拷贝赋值运算符: * T t1; * T t2; * t1 = t2; * 除了 类名 对象 = 对象 外的 = 应该都是赋值运算符 * * 移动构造函数: * 用右值初始化对象。 * std::move(对象)将对象转为右值 * * 移动赋值运算符 * T t1; * t1 = std::move(T()); */#include <iostream> // std::coutclass A{public: int a; //一个参数的构造函数(也叫做转换构造函数) A(int i):a(i) { printf("construct is called! %d \n",i); } ~A() { printf("deconstruct is called! \n"); } //拷贝构造函数 A(const A &v) { this->a = v.a; printf("copy construct is called %d\n", a); } //拷贝赋值运算符 A& operator = (const A &v) { printf("= is called \n"); if(this == &v) return *this; a = v.a; return *this; } //移动构造函数 A(A &&v) { this->a = v.a; printf("move construct is called %d\n", a); } //移动赋值运算符 A& operator = (A &&v) { printf("move = is called \n"); if(this == &v) return *this; a = v.a; return *this; }};int main (){ A a(1); //调用构造函数 A b(a); //调用拷贝构造函数 A c = a; //调用拷贝构造函数 A d(2); d = a; //调用拷贝赋值运算符 A e = std::move(A(3)); //调用移动构造函数 A f(4); f = std::move(A(5)); //调用移动赋值运算符 return 0;}
阅读全文
0 0
- 拷贝构造函数和移动构造函数解析
- C++拷贝构造函数和移动构造函数
- 拷贝构造函数和赋值构造函数
- 拷贝构造函数和赋值构造函数
- 构造函数,拷贝构造函数,和赋值
- 赋值构造函数和拷贝构造函数
- 拷贝构造函数和赋值构造函数
- 默认构造函数和拷贝构造函数
- c++构造函数和拷贝构造函数
- 拷贝构造函数和赋值构造函数
- 赋值构造函数和拷贝构造函数
- 拷贝构造函数和赋值构造函数
- 构造函数和拷贝构造函数
- C++构造函数和拷贝构造函数
- 默认构造函数和拷贝构造函数
- 构造函数与拷贝解析
- 拷贝构造函数和拷贝赋值函数
- Big-Five: 析构函数,拷贝构造函数,移动构造函数,拷贝赋值操作和移动赋值操作
- 深入理解ASP.NET MVC(目录)、打造自己的MVC框架
- MySQL主从同步部署
- 关于sql server 2008安装闪退问题解决
- CSS浮动(float,clear)通俗讲解
- C语言预处理命令总结
- 拷贝构造函数和移动构造函数解析
- JavaWeb.XML
- appium根据屏幕大小滑动界面driver.get_window_size()、driver.swipe()
- java简单的实现RabbitMQ
- Glide加载圆形图片的处理
- vi 和vim 的区别
- mysql的sql_mode 模式修改 my.cnf
- SPOJ
- CvPoint2D32f 找不到的问题