应该在无指针类中声明/实现析构吗?
should destructior be declared/implemented in pointerless class?
应该在无指针类中声明/实现析构吗?有/没有它有什么好处吗?
我想要的是:
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
析构函数。
事实上,你不应该直接管理资源,而应该使用包装器——即智能指针而不是原始指针&手动分配/回收。
相关文章:
- 如何在 CRTP 中实现析构函数?
- 如何使用指针向量实现类析构函数 C++.
- 使用shared_ptr时需要实现析构函数、复制构造函数、赋值运算符
- 当声明了虚拟析构函数但没有实现时会发生什么情况
- 如何实现在构造函数中使用自身的对象的析构函数
- 如何实现纯虚拟析构函数
- C++ 链接列表队列实现和析构函数错误:"Aborted (Core Dumped)"
- 为什么纯虚拟析构函数需要实现
- GoogleMock让我在mock类中实现析构函数吗
- 根据析构函数和移动构造函数实现移动赋值
- 重写默认构造函数/析构函数而不实现它们
- G++ 警告,缺少纯虚拟析构函数的实现
- C++ 抽象类是否应该为(虚拟)析构函数提供实现
- 静态字段的析构函数.辛格尔顿实现
- 当在头文件上而不是在CPP文件上实现时,析构函数会导致内存泄漏——仅在linux上实现
- 生产编译器如何在流控制上实现析构函数处理
- 为什么我们没有义务实现纯虚析构函数
- 使用D_ptr实现析构函数
- 实现析构函数
- 应该在无指针类中声明/实现析构吗?