存储可移动物体的"有效性"状态是否是一种好的做法?

Would it be a good practice to store a 'validness' state for movable objects?

本文关键字:一种 是否是 可移动 有效性 存储 状态      更新时间:2023-10-16

我正在设计一个库,其中许多类是可移动的。许多可移动类作为参数传递给其他类的函数。我正在考虑如何减少验证检查的代码。可移动类的实例在构造后总是处于有效状态,但是在从。

这将是一个很好的做法,有一个标志"有效",是真的构造后,成为假后移动。对象再次有效的唯一方法是将一个有效的对象移到其中。

我还会提到,在移动对象之后,不要进入对它们调用函数会导致未定义行为或任何事情的状态。只是移动后的内容是垃圾。

我应该,还是不应该?

这样的标志可能适合调试目的,但通常由使用库/代码的开发人员来确保他/她在使用了

之后不会以一种奇怪的方式使用您的对象。 移动构造函数移动赋值的全部目的是将数据从src移动到dst,这有效地使src除了垃圾什么都没有,使用这种功能的开发人员应该意识到这一点。

注意:结构永远不应该是病态的,包括赋值操作符,应该总是能够将新数据赋值给从对象移出的


由于从通过变量访问的对象中移动(例如:lvalue)只有在开发人员明确地这样说的情况下才会发生 1)开发人员与这样的代码签署了一个不可见的合同,使他/她对对象被移动后使用的任何副作用负责。

<一口>注意: 1)通过std::move (val) static_cast<T&&> (val)或等价的。



标准库

如果我们查看标准库,我们会发现在实践中没有valid标志,相反,它(如上所述)取决于开发人员,以确保他不会在移动的对象上使用无效的结构。

相关文章: