虚拟破坏者与普通破坏者
virtual destructors vs normal destructor
只是一个简单的问题。
编译器为我提供了选项:虚拟驱动器,但是我创建了一个普通类,而没有虚拟驱动器
在 ~
之前添加 virtual
的词与用编译器制造的虚拟破坏者创建类相同吗?
示例
之前:
~String();
之后:
virtual ~String();
我问这个问题,因为我在"父母"类中使用其他类指针。
是在〜之前添加虚拟词与用编译器制作的虚拟击路仪创建类的差异?
不,这不是同一回事。当您拥有父母和子类时,虚拟破坏者将很有用,并且您想首先删除子类实例,以删除基类的实例。这样可以防止内存泄漏,如果您的灾难不是虚拟的,否则会发生这种情况。基类实例只会被删除,而派生的实例会导致内存泄漏。
请参阅此示例:
Parent *object = new Child();
// Do stuff
delete object;
如果儿童类驱动器是虚拟的,则将首先清除Child
实例的内存,然后清除Parent
实例,确保不会发生内存泄漏。
如果Child
破坏者是不是虚拟的,则Parent
实例只会删除,因为object
是Parent*
的实例。Child
实例不会删除,从而导致内存泄漏。
了解虚拟的定义:
...虚拟关键字的作用是允许派生类的成员与基类中的名称相同的名称,以适当地从指针中调用是指向基类指向派生类的对象的指针...
来源:
- 多态性:C
- 何时使用虚拟破坏者?
相关文章:
- 虚拟决赛作为安全
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 如何在C++中获得"静态纯虚拟"功能?
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么我的虚拟破坏者多次执行这些执行
- 纯抽象类的虚拟破坏者
- 与虚拟破坏者相比,Shared_PTR的运行时开销用于子类破坏
- 虚拟破坏者与普通破坏者
- 删除具有非虚拟破坏者的对象将引起
- 在C 中,是否有一种(新的)方法来测试类是否在模板中具有虚拟破坏者而无需实例化实例
- 没有虚拟功能,但仍然需要虚拟破坏者
- 当试图检测基类是否具有虚拟破坏者时,如何获取正确的编译器错误消息
- 获取虚拟破坏者的重新定义错误
- 非造晶和非抽象基类中的虚拟破坏者
- 如何在Xcode中导出虚拟破坏者
- 虚拟破坏者:不工作