gpt4 book ai didi

c++ - 说一个C++对象是可 move 的,这到底意味着什么?

转载 作者:行者123 更新时间:2023-12-03 06:49:27 25 4
gpt4 key购买 nike

给出以下定义:

  • 对象-内存中包含某种类型的值的连续区域。
  • 值-根据对象类型解释的对象位。

  • 在讨论值类别时,C++编程语言书[第4版]的6.4.1节指出:

    Movable: The object may be moved from (i.e., we are allowed to moveits value to another location and leave the object in a valid butunspecified state, rather than copying.


    问题:
  • “将其值(value)转移到另一个位置”的真正含义是什么?
  • 如何 move 值(位解释)?
  • 如何在没有拷贝的情况下“move ”对象的字节?只是没有道理。

  • 有人可以解释一下吗?

    最佳答案

    1. What does "move its value to another location" really mean?

    这意味着另一个位置具有原始位置在 move 之前的值 ,因此 move 之后原始位置具有什么值并不重要。
    1. How can a value (a bit interpretation) be moved?

    例如,只需复制即可。如果一个人想要做更多的工作(不是仅仅由一袋位驱动的),就可以将原始位置设置为其他位模式,例如全零,这仍然被认为是成功的举动。复制与此处的区别在于,拷贝应保持原样不变。
    1. How can bytes of an object be "moved" without a copy? Just doesn't make sense.

    复制是有效的举动。
    有时原始文档中的位具有拥有资源的语义。如果只有一个资源,而您只是复制位,那么两个位置都“拥有”该资源,当两个对象都超出范围时,导致重复处置该资源。
    因此,此举会将资源的所有权转移到新位置,并将原始位置更改为不拥有资源。一个具体的示例是一个拥有的指针:复制该指针,然后将其原始设置为 nullptr

    拷贝可能比 move 更为昂贵(而且可能不会)。但继续使用拥有指针示例:如果创建该对象的拷贝,则在拷贝之后,必须存在两个资源(假定资源的唯一所有权)。
    因此,拷贝不会复制指针。拷贝将复制资源,然后新位置指向新资源。如果创建该资源的成本很高,那么只需复制指针并将其为空就可​​以使 move 便宜得多。

    一般而言,当类型同时支持两种操作时, move 应是对拷贝的优化。 move 绝不应该比复制贵。而且,如果 move 与复制具有相同的费用,则可以简单地不执行 move 操作,复制将无缝地处理 move 。每种类型的作者都应维持这种范例。
    对于标量(整数,指针, double 数等),复制和 move 是同一回事:复制位,请勿更改源。

    关于c++ - 说一个C++对象是可 move 的,这到底意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63911260/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com