虚拟破坏者与普通破坏者

virtual destructors vs normal destructor

本文关键字:破坏者 虚拟      更新时间:2023-10-16

只是一个简单的问题。

编译器为我提供了选项:虚拟驱动器,但是我创建了一个普通类,而没有虚拟驱动器

~之前添加 virtual的词与用编译器制造的虚拟破坏者创建类相同吗?

示例

之前:

~String();

之后:

virtual ~String();

我问这个问题,因为我在"父母"类中使用其他类指针。

是在〜之前添加虚拟词与用编译器制作的虚拟击路仪创建类的差异?

不,这不是同一回事。当您拥有父母和子类时,虚拟破坏者将很有用,并且您想首先删除子类实例,以删除基类的实例。这样可以防止内存泄漏,如果您的灾难不是虚拟的,否则会发生这种情况。基类实例只会被删除,而派生的实例会导致内存泄漏。

请参阅此示例:

Parent *object = new Child();
// Do stuff
delete object;

如果儿童类驱动器是虚拟的,则将首先清除Child实例的内存,然后清除Parent实例,确保不会发生内存泄漏。

如果Child破坏者是不是虚拟的,则Parent实例只会删除,因为objectParent*的实例。Child实例不会删除,从而导致内存泄漏。

了解虚拟的定义:

...虚拟关键字的作用是允许派生类的成员与基类中的名称相同的名称,以适当地从指针中调用是指向基类指向派生类的对象的指针...

来源:

  • 多态性:C
  • 何时使用虚拟破坏者?