4

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

我的男人是:

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

2 回答 2

5

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

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

  • 资源管理(内存管理,文件处理),
  • 记录,
  • 关闭网络连接,
  • 简而言之,每次销毁对象时都需要执行的自定义功能

一般来说,经验法则是:
“如果您需要提供复制构造函数或复制赋值运算符,那么您很可能还需要提供自己的析构函数。”
通俗地说,这条规则被称为三规则


[条件适用] 如果您的类旨在充当继承的基类,并且您的实现将需要调用delete指向派生类对象的基类指针,那么您需要提供一个析构函数并将其标记为virtual基类,失败这样做会导致Undefined Behavior


拥有/不拥有它有什么好处吗?

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

于 2013-01-08T14:57:59.713 回答
2

不,如果您不管理资源,则不应使用非析构函数。virtual

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

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

于 2013-01-08T14:57:50.820 回答