- 主题:c++真是快被标准委员会玩成花了啊
是不是得理解内存模型才能理解这几个概念
【 在 z16166 的大作中提到: 】
: 拷贝、移动,这在Rust里也有,因为这玩意儿决定了效率,才要搞这个区分,把决定权交给码农,码农知道什么情况下该拷贝,什么情况下该移动。懒的码农,其实可以无脑用shared_ptr的,哈哈,当然,出现内存泄漏啥的就别怪了。
: std::forward那个跟模板参数推导有关,不用模板的话,用不着。
--
FROM 114.249.23.*
我表达有误,是不是和栈结构以及寄存器有关
就像go语言一样,以前用栈传参,现在新版本改成用寄存器传参
【 在 z16166 的大作中提到: 】
: 这几个跟内存模型无关,copy/move是性能考虑,forward纯粹是模板推导的需要。
: 跟内存模型有关的主要是锁、无锁。
:
--
FROM 114.249.23.*
不需要到这一层
是不是理解了对象所有权就够了
【 在 z16166 的大作中提到: 】
: 非也
:
--
FROM 114.249.23.*
谢谢。很清楚。
看起来这样也没必要纠结,编译后的伪汇编代码了。
【 在 z16166 的大作中提到: 】
: copy/move涉及的是对象内部的数据/状态的复制、转移操作,跟对象的所有权不是一回事。
: 比如:
: 对象A内部分配了一个内存缓冲区保存在其成员m_ptr里:
: ...................
--
FROM 114.249.23.*
所以说啊,这个看完不用就会忘记
得在使用中记得使用场景
还得理解左值引用和右值引用
所以我糊涂的就是,为啥不把编译后的中间码列出来
比如 不使用move是这样,使用了move是这样
我觉得最终还是要映射到汇编语句,理解了汇编语句才能搞明白
否则就是记各种使用场景
要么就是楼主说得就是为了几个使用场景,为了效率,打的补丁。
【 在 toutouqi 的大作中提到: 】
: 可不可以这样理解,move就是不保证输入参数数据完整性的拷贝,目的是为了某些情况下减少内存拷贝?
: 用move的场景,如果改用指针,对象指针直接赋值,再把原指针赋0,连普通成员变量的拷贝都省了,看起来似乎比用move概念更清楚。不知道啥场景必须设计成用move而不用指针?
--
修改:littleSram FROM 114.254.9.*
FROM 114.254.9.*