虚拟析构函数与普通析构函数

时间:2017-03-14 06:30:20

标签: c++

只是一个简单的问题。

编译器给我选项:虚拟析构函数,但我创建了一个没有虚析构函数的普通类

virtual之前添加单词~与使用编译器生成的虚拟析构函数创建类相同吗?

例如

之前:

~String();

后:

virtual ~String();

我问这个问题,因为我在我的" parent"中使用了其他类指针。类。

1 个答案:

答案 0 :(得分:0)

  

在添加单词virtual之前是否与使用编译器生成的虚拟析构函数创建类相同?

不,这不是一回事。当您拥有父类和子类时,虚拟析构函数很有用,并且您希望通过首先删除子类的实例来删除基类的实例。这样可以防止内存泄漏,如果你的析构函数不是虚拟的,就会发生内存泄漏;基类实例只会被删除,导致派生实例导致内存泄漏。

见这个例子:

Parent *object = new Child();

// Do stuff

delete object;

如果子类析构函数是虚拟的,那么将首先清除为Child实例分配的内存,然后清除Parent实例,确保不会发生内存泄漏。< / p>

如果Child析构函数不是虚拟,那么Parent实例将仅被删除,因为objectParent*的实例。 {@ 1}}实例不会被删除,从而导致内存泄漏。

了解 虚拟 的定义可能会在这里使用:

  

... virtual关键字的作用是允许从指针中适当地调用与基类中具有相同名称的派生类的成员,更确切地说,当指针的类型时是指向派生类的对象的基类的指针...

来源: