在C ++中,有没有权威的方法可以防止“移动后使用”错误?

Dar*_*nor 9 c++ c++11

我发现这些错误对于开发人员来说太容易了。是否有最佳实践或权威方法来避免这种情况?是否有可在多个平台上使用的编译器标志或提示?

eer*_*ika 3

有效的经验法则:永远不要使用std::movenor std::forward,也永远不要将类型转换为右值(或通用)引用。如果您从不从变量或引用移动,那么您就不会犯随后使用它的错误。这种方法显然有一个缺点,因为在某些情况下,当移动足够时,这些实用程序可用于将副本转换为移动;更不用说有必要的情况了。

针对您自己的类型的方法:将断言添加到成员函数中,以验证实例是否已被移出,并依赖它们在测试期间触发。“移动”状态需要存储为成员。断言和成员可以在发布版本中删除。缺点是这会给每个成员函数添加不必要的样板。

另一种方法:使用静态分析工具来尝试检测潜在的错误。

合理的经验法则:保持函数简短。当函数较短时,使用将接近移动,因此更容易发现潜在的错误。