我很难学习取消“其他”对象,我刚刚阅读了关于移动语义here的整篇大文章,我很失望,因为它没有涵盖无效
请解释一下,我们真的需要取消“其他”的所有成员或仅指向动态分配内存的指针吗?
为什么我们要关心不在堆上的成员(其他对象)?有什么好理由吗?
答案 0 :(得分:3)
从对象移开后,它的析构函数在清理后仍然会被调用。这意味着它需要知道它是否应该释放它拥有的资源,因此它们需要被取消(或者你称之为!)所以指针不会被双重删除等。
答案 1 :(得分:2)
您需要将已移动的对象保留为有效状态。我认为这意味着不使用该对象会导致未定义的行为。实际上,这意味着不要让指针指向已释放的内存。我可以想象可能存在其他场景,例如对象是否持有任何其他资源(打开套接字,文件等等)。
答案 2 :(得分:0)
我不知道在构造函数的情况下你是否真的是这个意思,甚至是动态分配普通指针的情况。
但Nullyfing指针将其保存为Dangling pointer
,因为它在为其分配的内存空闲后指向null。进一步使用这些指针并解除引用这些指针将导致核心转储,这些核心转储比未执行时更容易定位。不这样做可能会产生意想不到的结果,导致核心转储很难找到甚至数据损坏。
简而言之,你应该只关注指针。
答案 3 :(得分:0)
仍然必须销毁移动的对象,或者可能分配新值。您必须将其置于这些操作将起作用的状态。
如果您有“被盗”指向动态数据的指针,您可能必须将null指定给原始指针,以便删除它们。如果其中一个整数成员保持指向的对象的大小,则可能必须将其归零(与空指针一致)。其他值可能保持不变。