C++11——移动构造函数及std::move()

[复制链接]
 楼主| keer_zu 发表于 2023-2-18 10:23 | 显示全部楼层 |阅读模式
复制构造和移动构造

复制构造是这样的:
在对象被复制后临时对象和复制构造的对象各自占有不同的同样大小的堆内存,就是一个副本。


3971463f036b4f0242.png


 楼主| keer_zu 发表于 2023-2-18 10:25 | 显示全部楼层
移动构造是这样的:
就是让这个临时对象它原本控制的内存的空间转移给构造出来的对象,这样就相当于把它移动过去了。
3254263f036fb8da35.png
 楼主| keer_zu 发表于 2023-2-18 10:27 | 显示全部楼层
这里就存在一个疑问:可以对函数里面创建的对象(局部)做move吗?例如:

1165963f037724ef37.png

 楼主| keer_zu 发表于 2023-2-18 10:56 | 显示全部楼层
可以 move。但如果只是个结构体,没有对 move 优化的话,写了一点用都没有。
除非结构体里有 string、vector 之类的东西。
 楼主| keer_zu 发表于 2023-2-18 10:57 | 显示全部楼层
像容器类,栈上的 变量只存个指针,大头数据在堆上,或者是其他什么分配器分配的内存上
这种move有用,一般的struct move没用。
 楼主| keer_zu 发表于 2023-2-18 10:57 | 显示全部楼层
move 只是把左值变成右值引用。真正能不能移动要看你的操作(你这边的 push 里面实际用到的移动构造)能不能真正移动。如果你是个普通的结构体,里面也没有 string、vector 之类的东西,那这个移动就是个普通的拷贝。
 楼主| keer_zu 发表于 2023-2-18 11:01 | 显示全部楼层
本帖最后由 keer_zu 于 2023-2-18 11:10 编辑

C++ 11之 && 右值引用 - - 21ic电子技术开**坛

评论

**  发表于 2023-2-18 11:42
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12917

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部