只是一个简单的问题。
编译器给我选项:虚拟析构函数,但我创建了一个没有虚析构函数的普通类
在virtual
之前添加单词~
与使用编译器生成的虚拟析构函数创建类相同吗?
例如
之前:
~String();
后:
virtual ~String();
我问这个问题,因为我在我的" parent"中使用了其他类指针。类。
答案 0 :(得分:0)
在添加单词virtual之前是否与使用编译器生成的虚拟析构函数创建类相同?
不,这不是一回事。当您拥有父类和子类时,虚拟析构函数很有用,并且您希望通过首先删除子类的实例来删除基类的实例。这样可以防止内存泄漏,如果你的析构函数不是虚拟的,就会发生内存泄漏;基类实例只会被删除,导致派生实例导致内存泄漏。
见这个例子:
Parent *object = new Child();
// Do stuff
delete object;
如果子类析构函数是虚拟的,那么将首先清除为Child
实例分配的内存,然后清除Parent
实例,确保不会发生内存泄漏。< / p>
如果Child
析构函数不是虚拟,那么Parent
实例将仅被删除,因为object
是Parent*
的实例。 {@ 1}}实例不会被删除,从而导致内存泄漏。
了解 虚拟 的定义可能会在这里使用:
... virtual关键字的作用是允许从指针中适当地调用与基类中具有相同名称的派生类的成员,更确切地说,当指针的类型时是指向派生类的对象的基类的指针...
来源: