编写构造函数/析构函数是一种好习惯吗?

时间:2018-08-27 01:15:02

标签: c++ class constructor destructor

我想知道即使我不使用它们总是写构造函数/析构函数是否是个好习惯。

class Foo
{
public:
    Foo(){};
    ~Foo(){};
};

还是只有在我实际使用它们时才编写它们是更好的做法?

class Foo
{
public:
};

1 个答案:

答案 0 :(得分:16)

当默认成员函数足够时,用户定义特殊成员函数是一个坏主意。

  • 您将丢失默认生成的移动操作,请参见Does a default virtual destructor prevent compiler-generated move operations?

  • 您的课程将不再是琐碎的事情,这会导致分配和释放以及持有您课程的容器的效率大大降低。

  • 默认定义可能会自动noexcept,但您丢失了它。

  • 您的课程不再是聚合,因此您不能使用聚合初始化。

  • 如果将析构函数虚拟化,如您的问题所示,您还将失去标准布局。