用实例代码理解一下c++11”定义析构函数阻止合成移动”
来源:互联网 发布:哥贝克力 知乎 编辑:程序博客网 时间:2024/06/01 10:06
先普及一下基本知识:
1、移动:int &&a = b; 将b移动给a,会避免一些对象复制,移动之后,b就没有用了。
2、析构:对象释放时,执行的清理函数。
原理很好理解:如果定义了析构函数,则说明清理工作有一些个性化,成员数据如果执行了移动 ,会产生扫尾时,数据已经无效了或继续有效,但操作会影响其他对象。这个时间,会执行拷贝代替移动 。
通过以下代码的差异化,可以感受一下:
1、F2有一个F类型的成员,通过显示定义拷贝和移动,打出日志来查看过程。
2、调用test时,传递参数,执行了一次拷贝,输出new
3、返回值赋值给f3时,执行移动,定义~F2则无法执行移动,执行了拷贝。
class F{public: F() = default; F(const F& f) { cout << "new" << endl; } //显示定义拷贝构造 F(const F&& f) { cout << "move" << endl; } //显示定义移动构造 F& operator=(const F& f) { cout << "eq" << endl; }};class F2{public: F m_f1; ~F2() { } //加这行,输出2个new,不加输出new和move};F2 test(F2 f) { return f; }int main(){ F2 f1; F2 &&f3 = test(f1);
return 0;
}
阅读全文
0 0
- 用实例代码理解一下c++11”定义析构函数阻止合成移动”
- C语言小问题--函数定义理解
- 合成析构函数与虚析构函数
- 【C\C++学习】之十八、C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
- C语言(21)-----函数定义与调用实例
- Event—跟随鼠标移动的div实例阻止冒泡
- 析构函数与合成析构函数
- 合成析构函数和析构函数
- 析构函数的作用及合成析构函数
- 合成析构函数和析构函数
- C代码简洁之道-函数宏定义
- 合成复用原则(C++)
- C++《析构函数的定义和使用》
- 代码实例理解yield
- C#,代码,移动窗体
- 合成函数
- C语言用宏定义替代函数定义
- 关于JavaScript中函数的定义、对象以及对象实例化的理解
- oracle10G/11G官方下载地址集合 直接迅雷下载
- adaBoost算法学习笔记
- 文章标题
- SpringMVC学习之非注解的处理器映射器和适配器
- 14. Longest Common Prefix
- 用实例代码理解一下c++11”定义析构函数阻止合成移动”
- 幻境.最后一天
- 1、全志A33烧录固件(TF卡刷机)
- 我为什么要写博客
- Canvas 与 SVG 的比较
- unity3D 代码实现自定义平面
- Java
- 工厂模式区别
- git 删除本地追踪远程仓库但远程仓库已经不存在的分支