应该在无指针类中声明/实现析构函数吗?拥有/不拥有它有什么好处吗?
我的男人是:
class Point
{
public:
int X, Y;
Point(int x, int y);
//~Point(void); //should I uncoment it and implement empty destructor ?
}
应该在无指针类中声明/实现析构函数吗?拥有/不拥有它有什么好处吗?
我的男人是:
class Point
{
public:
int X, Y;
Point(int x, int y);
//~Point(void); //should I uncoment it and implement empty destructor ?
}
应该在无指针类中声明/实现析构函数吗?
不需要[条件适用]。编译器将为您生成一个。
仅当您想要执行特定的操作时才应提供一个,而编译器不会。
例如:
一般来说,经验法则是:
“如果您需要提供复制构造函数或复制赋值运算符,那么您很可能还需要提供自己的析构函数。”
通俗地说,这条规则被称为三规则。
[条件适用] 如果您的类旨在充当继承的基类,并且您的实现将需要调用delete
指向派生类对象的基类指针,那么您需要提供一个析构函数并将其标记为virtual
基类,失败这样做会导致Undefined Behavior。
拥有/不拥有它有什么好处吗?
无,因为编译器做同样的事情,所以不需要额外输入。
不,如果您不管理资源,则不应使用非析构函数。virtual
如果您希望从类派生并计划多态删除(即delete
通过基类指针派生的对象),则需要一个virtual
析构函数。
事实上,您不应该直接管理资源,而应该使用包装器——即智能指针而不是原始指针和手动分配/解除分配。