为什么默认情况下析构函数不是虚拟的

简介: 为什么默认情况下析构函数不是虚拟的

因为很多类并不是设计来作为基类使用的, 虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。

那么我什么时候应该声明一个析构函数为虚拟的呢? 每当该类具有至少一个虚函数时。 拥有虚函数表明一个类是作为一个派生类的接口,如果是派生类的对象可以通过指向基类的指针销毁。 例如:

class Base {

       // ...

       virtual ~Base();

   };


   class Derived : public Base {

       // ...

       ~Derived();

   };


   void f()

   {

       Base* p = new Derived;

       delete p;    // 用于确保调用 ~Derived 的虚拟析构函数

   }    

如果 Base 的析构函数不是虚拟的,Derived 的析构函数就不会被调用 - 可能产生不良影响,例如 Derived 拥有的资源不 被释放

 

相关文章
|
6天前
|
编译器 C语言 C++
类的6个默认成员函数(上)
类的6个默认成员函数(上)
5 0
|
6天前
|
设计模式 算法 编译器
【C++ 析构函数】C++ 私有析构函数的作用
【C++ 析构函数】C++ 私有析构函数的作用
34 1
|
6天前
|
前端开发 算法 JavaScript
检查是否是类的对象实例
检查是否是类的对象实例
20 0
|
6天前
|
编译器 C++
C++:类的默认成员函数
C++:类的默认成员函数
38 0
|
6天前
|
存储 编译器 C++
类的默认成员函数(C++)
1.构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个成员函数都初始值,并且在对象的整个生命周期内只调用一次。
51 0
|
6月前
|
存储 编译器 C++
C++中类的几个默认成员函数
C++中类的几个默认成员函数
|
6月前
|
API 网络架构
虚拟机绑定浮动ip只能选择同一个路由器上的吗
在虚拟网络环境中,绑定浮动IP通常是与路由器相关的操作。虚拟机绑定浮动IP时,通常是通过路由器将浮动IP映射到虚拟机的内部IP地址。 在一些云平台中,浮动IP地址通常与特定的路由器相关联。因此,如果你想要将浮动IP绑定到虚拟机,通常需要选择与该虚拟机所在的VPC(虚拟私有云)或子网相关联的路由器。 具体来说,通常有以下步骤: 1. **选择浮动IP:** 在云平台的控制台或使用相关API时,选择要绑定的浮动IP。 2. **选择路由器:** 在绑定浮动IP时,通常需要选择一个路由器,将浮动IP与该路由器相关联。 3. **选择虚拟机:** 然后,你需要选择要将浮动IP绑定到的虚拟机。
631 1
|
6月前
|
存储 Cloud Native Linux
C++什么时候生成默认拷贝构造函数
C++什么时候生成默认拷贝构造函数
|
11月前
|
编译器 C++
【C++】类的6个默认成员函数详解(上)
【C++】类的6个默认成员函数详解
106 0
|
11月前
|
编译器 C++
【C++】类的6个默认成员函数详解(下)
【C++】类的6个默认成员函数详解(下)
67 0