gpt4 book ai didi

c++ - 始终声明默认构造函数的优缺点是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:05 27 4
gpt4 key购买 nike

为每个非用户定义的构造函数声明始终默认的构造函数的优缺点是什么?

考虑一个带有用户定义的构造函数的类,它不需要其他用户定义的构造函数,它将是:

class Foo
{
public:
Foo() { // user-defined declaration }
Foo(const Foo&) = default;
Foo(Foo&&) noexcept = default;
~Foo() = default;

Foo& operator=(const Foo&) = default;
Foo& operator=(Foo&&) = default;
}

这样做还有其他实际的优点/缺点吗?

最佳答案

我头顶的几个缺点:

  1. 你可以忘记特殊功能。您展示的示例未定义复制/移动赋值运算符。
  2. 在 header 中将析构函数声明为默认值将使您无法使用前向声明的类,例如类的 std::unique_ptr 成员。您可以通过包含类定义来缓解这种情况(导致重要项目的(重新)构建时间最终总体增加,尤其是当未预先声明的类经常更改时)。您可以通过将 = default 移动到源文件中的定义来缓解这种情况。
  3. (主观)它在视觉上重载了类定义:每个有能力的 C++ 开发人员都知道这些通常是自动生成的,因此它们没有提供额外的信息,尽管它们需要时间来阅读和理解。请注意,我只是在谈论“一切默认”的情况,因此没有删除任何特殊功能或类似功能。
  4. 添加一个只能移动的数据成员将要求您同时删除 =default 复制构造函数和赋值运算符。您是否需要这样做在一定程度上是风格问题,但这确实会导致更多涉及的代码更改,尤其是在更一般意义上重构此类类时。
  5. 如果任何其他由编译器生成的特殊函数被添加到更高版本的 C++ 中,您会自动错过它们,否则您已经隐式定义了它们。

除了这些之外,可能还有更多的微妙级别在上升。

关于c++ - 始终声明默认构造函数的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914652/

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