拷贝构造函数和移动构造函数解析
2017-12-05 14:33
211 查看
/** * 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::cout class 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; }
相关文章推荐
- C++ 学习笔记(13)拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数、右值引用、引用限定符
- C++拷贝构造函数和移动构造函数
- C++:实例解析构造函数、析构函数、拷贝构造函数等
- C++ 构造函数 析构函数 拷贝构造函数 运算符重载解析。
- Big-Five: 析构函数,拷贝构造函数,移动构造函数,拷贝赋值操作和移动赋值操作
- C++中构造函数、参数列表、析构函数、拷贝构造函数、动态分配的数组变量的删除的简单例子
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- SAP-MM-移动类型解析之发货
- 构造函数而后拷贝构造函数的区别
- 构造函数与拷贝解析
- 移动商城第二篇【页面框架解析】
- 对构造函数、拷贝构造函数和赋值操作符调用的简单回顾
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- 赋值构造函数和拷贝构造函数的区别
- 字符串strcpy函数的实现,以及字符串string的实现,编写构造函数,拷贝构造函数,赋值函数,析构函数
- (重要)JS中的构造函数详细解析
- 分享实录+PPT | 高通高级技术标准总监李俨:移动车联网技术解析
- JavaScript构造函数解析
- c++ 移动构造函数
- 默认移动构造函数