假设我有一个主类SomeManager来跟踪另一个类SomeClass的实例.当构造SomeClass时,它调用SomeManager的方法将一个指针传递给它.然后SomeManager获取该指针并将其推入向量. SomeClass的析构函数调用SomeManager的另一个函数,它从向量中删除它的指针.
所以,我的问题是.当SomeClass的实例通过移动运算符或构造函数移动时.这是地址更改,我必须删除旧地址并添加新地址吗?
我从我读过的内容中得到了一些想法,但我不确定,我不想搞砸.
解决方法
简答:不,从对象移动的地址不会改变.但旧的对象可能不是一个有用的状态.
执行移动构造时,您将创建一个新对象并将另一个对象的内容移动到新对象中.新对象将始终构造在与旧对象不同的内存位置.移动赋值会发生类似的事情:你只需将一个对象的内容移动到另一个对象,但你仍然需要在两个不同的内存位置有两个不同的对象来执行赋值(好的,有自我赋值,但我们会忽略它) .旧对象仍然存在(好吧,它可能是在语句结束时被破坏的临时对象),但是大多数时候你不能保证旧对象,除非它处于某种有效状态.
类比可以是装满家具的房子.移动建筑就像建造一所新房子并将家具搬到它上面.移动任务就像购买第二个预先存在的房屋并将家具移动到它.在这两种情况下,新房子都有一个与旧房子不同的地址,但旧房子仍然存在.它可能不是一个有用的状态(很难住在没有家具的房子里!).