gpt4 book ai didi

c++ - 我们需要设置 move constructor = default 吗?对于过去使用 C++98/03 用户声明的析构函数构建的遗留类?

转载 作者:行者123 更新时间:2023-11-30 01:01:57 27 4
gpt4 key购买 nike

所以问题是,让我们考虑一个在过去总是为 C++98/03 标准构建的 C++ 大型遗留项目。

并且该项目遵循rule of three ,因此项目中有很多用户定义的析构函数。

如果现在项目是为标准 C++11/14/17 构建的,手动设置 move constructor = default 是个好主意吗?

由于 Howard Hinnant 在 Accu_2014 上展示的幻灯片,这些类不会自动提供移动构造函数。 ACCU2014 Howard Hinnant, Special Members

所以问题是,通过为每个类设置 move constructor = default,项目能否提高性能?

更准确地说,假设在设置 move constructor = default 之后,应用程序运行与以前完全一样,所有单元测试都像以前一样工作。

您认为定义 move constructor = default 会带来性能优势吗?

谢谢

最佳答案

Do you think there will be a performance benefit by defining the move constructor = default?

如果不研究代码库和运行一些基准测试,就不可能预测到这一点。令人难过的是,它可能会对您的运行时性能产生积极影响。有一个= default移动构造函数和移动赋值运算符,并且考虑到它们做正确的事情永远不会悲观。可能发生的最糟糕的事情是您的数据成员没有从移动构造中受益(例如,您有一个 std::array<int, 1000> 数据成员),然后您最终会像以前一样进行复制。

And the project followed the rule of three

当您对代码进行现代化改造时,这会导致一致性问题。在 C++11 中,三的规则现在是五的规则。因此,如果您到目前为止一直遵循三规则,除了您可能获得的运行时性能优势之外,您应该迁移到五规则以保持一致。

is it a good idea to set the move constructor = default manually?

没有。使用 clang-tidyC.21检查让工具对你尖叫。

关于c++ - 我们需要设置 move constructor = default 吗?对于过去使用 C++98/03 用户声明的析构函数构建的遗留类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57239172/

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