c ++ - 应该在无指针类中声明/实现破坏吗?

时间:2013-01-08 14:57:25

标签: c++ implementation

是否应该在无指针类中声明/实现破坏? 拥有/不拥有它有什么好处吗?

我是男人:

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

2 个答案:

答案 0 :(得分:5)

  

是否应该在无指针类中声明/实现破坏?

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

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

一般来说,拇指规则是:
“如果您需要提供复制构造函数或复制赋值运算符,那么您很可能还需要提供自己的析构函数。”
通常,此规则称为 Rule of Three


[条件适用] 如果您的类要作为继承的基类,您的实现将需要在指向派生类对象的Base类指针上调用delete,然后你需要提供一个析构函数并在Base类中将其标记为virtual,否则将导致未定义的行为


  

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

没有,因为编译器也是这样做的,所以不需要进行额外的输入。

答案 1 :(得分:2)

不,如果您没有管理资源,则不应该有virtual 析构函数。

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

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