我想知道即使我不使用它们总是写构造函数/析构函数是否是个好习惯。
class Foo
{
public:
Foo(){};
~Foo(){};
};
还是只有在我实际使用它们时才编写它们是更好的做法?
class Foo
{
public:
};
答案 0 :(得分:16)
当默认成员函数足够时,用户定义特殊成员函数是一个坏主意。
您将丢失默认生成的移动操作,请参见Does a default virtual destructor prevent compiler-generated move operations?
您的课程将不再是琐碎的事情,这会导致分配和释放以及持有您课程的容器的效率大大降低。
默认定义可能会自动noexcept
,但您丢失了它。
您的课程不再是聚合,因此您不能使用聚合初始化。
如果将析构函数虚拟化,如您的问题所示,您还将失去标准布局。