应该在无指针类中声明/实现析构吗?

should destructior be declared/implemented in pointerless class?

本文关键字:实现 析构 声明 指针      更新时间:2023-10-16

应该在无指针类中声明/实现析构吗?有/没有它有什么好处吗?

我想要的是:

class Point
{
public: 
    int X, Y;
    Point(int x, int y);
    //~Point(void);       //should I uncoment it and implement empty destructor ?
}

应该在无指针类中声明/实现析构吗?

不需要[条件适用]。编译器会为你生成一个。
只有当你想要执行一些编译器不会执行的特定操作时,你才应该提供一个。
例如:

    资源管理(内存管理,文件处理),
  • 日志,
  • 关闭网络连接
  • 简而言之,自定义功能需要在每次对象被销毁时执行
一般来说,经验法则是:
"如果需要提供复制构造函数或复制赋值操作符,那么很可能还需要提供自己的析构函数。"
通常,这个规则被称为三规则

[条件适用]如果你的类意味着作为继承的基类,你的实现将需要调用delete的基类指针指向派生类对象,那么你需要提供一个析构函数并将其标记为virtual在基类中,失败这样做将导致未定义行为


有/没有它有什么好处吗?

没有,因为编译器做了同样的事情,所以不需要做额外的输入。

不,如果你不管理资源,你就不应该有virtual 析构函数。

如果您希望从类派生并计划进行多态删除(即delete通过基类指针派生对象),则需要virtual析构函数。

事实上,你不应该直接管理资源,而应该使用包装器——即智能指针而不是原始指针&手动分配/回收。