微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 11:移动操作是否改变了地址?

假设我有一个主类SomeManager来跟踪另一个类SomeClass的实例.当构造SomeClass时,它调用SomeManager的方法一个指针传递给它.然后SomeManager获取该指针并将其推入向量. SomeClass的析构函数调用SomeManager的另一个函数,它从向量中删除它的指针.

所以,我的问题是.当SomeClass的实例通过移动运算符或构造函数移动时.这是地址更改,我必须删除旧地址并添加新地址吗?

我从我读过的内容中得到了一些想法,但我不确定,我不想搞砸.

解决方法

简答:不,从对象移动的地址不会改变.但旧的对象可能不是一个有用的状态.

执行移动构造时,您将创建一个新对象并将另一个对象的内容移动到新对象中.新对象将始终构造在与旧对象不同的内存位置.移动赋值会发生类似的事情:你只需将一个对象的内容移动到另一个对象,但你仍然需要在两个不同的内存位置有两个不同的对象来执行赋值(好的,有自我赋值,但我们会忽略它) .旧对象仍然存在(好吧,它可能是在语句结束时被破坏的临时对象),但是大多数时候你不能保证旧对象,除非它处于某种有效状态.

类比可以是装满家具的房子.移动建筑就像建造一所新房子并将家具搬到它上面.移动任务就像购买第二个预先存在的房屋并将家具移动到它.在这两种情况下,新房子都有一个与旧房子不同的地址,但旧房子仍然存在.它可能不是一个有用的状态(很难住在没有家具的房子里!).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐