C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;
可以取地址的是左值,左值在内存中不在寄存器;int a; char b; a,b 都是左值;
去不了地址的都是右值,右值不在内村中实在寄存器内部; int c= a+b ;"a+b" 就是一个右值
move()可以实现将一个左值转换为右值的功能
// std::swap
#include <iostream>
#include <vector> // std::vector
#include <algorithm>
using namespace std;
class A
{int *p;public:A(int value) : p(new int(value)){cout << "create obj " << p << endl;}~A(){std::cout << "delete pointer: " << p << std::endl;//查看析够函数删除了哪个指针if (p != nullptr){delete p;}}A(A &&a){if (this != &a){p = a.p;a.p = nullptr;cout << " move " << p << endl;}else{cout << "move self" << endl;}}A(const A &a){if (this != &a){p = new int(233);*p = *(a.p);cout << " copy " << p << endl;}else{cout << "copy self" << endl;}}A &operator=(A &&a){if (this != &a){p = a.p;a.p = nullptr;cout << " && == move" << p << endl;return *this;}else{cout << "move = self" << endl;}}A &operator=(const A &a){if (this != &a){p = new int(233);*p = *(a.p);cout << " & == copy" << p << endl;}else{cout << "copy = self" << endl;}return *this;}void print(A &a){cout << "print " << (a.p) << endl;// A b = a;//a.p=nullptr;}};
//总结: 只有变量之间赋值才会使用赋值运算符“=”
// 使用一个对象初始化新建对象都是使用移动或者是复制构造函数;int main()
{vector<A> vec;{A a(1);//A b(2);//A b(move(a)); //移动构造函数//A e(a);//复制构造函数//A d =move(a);//移动构造函数//A c=a; //复制构造函数// a.print(a);// getchar();//std::swap(a,b);//A c(2);//c=a;//使用了复制赋值函数//c =move(a); //使用了移动赋值函数//c.print(c);//自己移动自己和自己复制自己测试//a=(move(a)); //如果没有if(this!=&a)则会产生错误//a = a;////容器测试:容器可以使用复制构造函数也可以使用移动构造函数给容器添加元素//vec.push_back(move(a)); //使用了移动构造函数//vec.push_back(a);//使用了复制构造函数}getchar();}
C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;相关推荐
- C++深复制(深拷贝)、浅复制(浅拷贝)和复制构造函数(拷贝构造函数)详解+实例
转载出处:https://blog.csdn.net/sxhelijian/article/details/23209967 对象的复制 对于普通类型的对象来说,它们之间的复制是很简单的,例如: in ...
- 复制对象clone(深复制和浅复制)
Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...
- 前端复制、剪切、禁止复制等
前言 前两天基于vue和highlight写了一个代码展示的demo,里面用到了关于复制的功能,查了一些文章,在这里进行整理. 对代码展示demo感兴趣的可以看:vue3:基于highlight实现代 ...
- Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数、复制到Excel文件、复制到文本文件(默认是tsv格式)、复制到文本文件(设置逗号分隔符)
Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数.复制到Excel文件.复制到文本文件(默认是tsv格式).复制到文本文件(设置逗号分隔符) ...
- mysql半备份_MySQL半同步复制与增强半同步复制详解及安装
一.基础 1.目前MySQL主要有三种复制方式 1)异步复制 2)半同步复制 3)增强半同步复制 推荐使用:对性能要求较高的推荐使用异步复制 ,如果运行的金融类业务推荐使用增强半同步复制,并使用ROW ...
- python列表浅复制_Python列表的深复制和浅复制示例详解
一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...
- crtlc不能复制文件_ctrl+c不能复制怎么办
展开全部 Ctrl+1快速修复(最经典的快捷键,就不用多说了)Ctrl+D:删除当前行62616964757a686964616fe78988e69d8331333363376533Ctrl+Alt+ ...
- python中2d_【IT专家】如何在Python中复制一个2D数组?(复制)
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 如何在 Python 中复制一个 2D 数组? ( 复制 ) 如何在 Python 中复制一个 2D 数组 ?( 复制 )[ 英 ]How to ...
- hashmap 复制_复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判断 ...
- python list 深复制_Python列表的深复制和浅复制示例详解
免费资源网,https://freexyz.cn/ 一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码 ...
最新文章
- 微信小程序获取用户手机号,后端php实现 (前后端完整代码附效果图)
- 合格前端系列第五弹- Virtual Dom Diff
- SQLite Update 语句(http://www.w3cschool.cc/sqlite/sqlite-update.html)
- Spring Boot集成Redis,这个坑把我害惨了!
- JAVA学生信息管理系统IO流版
- Table of Delphi data types and C++ types
- java中的工厂模式_java中工厂模式详解和使用方法
- python求解微分方程组_用python解一阶微分方程组
- VC++监听数据分析出明文账号密码
- 用USBoot制作U盘启动盘
- 2018百度seo最新算法大全 青岛墨羽SEO统计
- LaTeX2021 公式编写、图文安装、详细教程、一文读懂
- 《剑指offer》读后感
- CE-FPN: Enhancing Channel Information for Object Detection
- Bzoj4484 [Jsoi2015]最小表示
- xp下硬盘安装Ubuntu Kylin 14.04
- 五连阳回调买入法_百战百胜选股指标-月盈利40%以上,史上最全分时图买卖战法。...
- java获取本机IP
- iOS中“事件”的前因后果
- 借条可以成为质押财产吗?