是否应该在无指针类中声明/实现破坏? 拥有/不拥有它有什么好处吗?
我是男人:
class Point
{
public:
int X, Y;
Point(int x, int y);
//~Point(void); //should I uncoment it and implement empty destructor ?
}
答案 0 :(得分:5)
是否应该在无指针类中声明/实现破坏?
不需要 [条件适用] 。编译器会为你生成一个 只有在你想要执行某些特定的东西时才应该提供一个,而编译器则不会 例如:
一般来说,拇指规则是:
“如果您需要提供复制构造函数或复制赋值运算符,那么您很可能还需要提供自己的析构函数。”
通常,此规则称为 Rule of Three 。
[条件适用] 如果您的类要作为继承的基类,您的实现将需要在指向派生类对象的Base类指针上调用delete
,然后你需要提供一个析构函数并在Base类中将其标记为virtual
,否则将导致未定义的行为。
拥有/没有它有什么好处吗?
没有,因为编译器也是这样做的,所以不需要进行额外的输入。
答案 1 :(得分:2)
不,如果您没有管理资源,则不应该有非virtual
析构函数。
如果您希望从类派生并计划多态删除(即delete
通过基类指针派生对象),则需要virtual
析构函数。
实际上,你不应该直接管理资源,而是使用包装器 - 即智能指针而不是原始指针&手动分配/解除分配。