[C++ Daily] 虚继承与虚析构带来的变化

虚继承

在菱形继承中,若 Student 和 Teacher 继承于 Person, TS 继承于 Student 和 Teacher,则构造 TS 时会调用两次 Person 的 Construct 和 Destruct 函数,若为虚继承,则不会出现上述问题(此类问题主要解决继承带来的多次非法delete)

原继承:

image-20240906152637082

结果:

image-20240906152651949

虚继承:

image-20240906152532506

结果:

image-20240906152549865

虚析构

父类指针开辟子类指针堆空间时无法调用子类析构函数从而发生内存泄露的问题

原泄露代码:

image-20240906153547358

结果:

image-20240906153602091

造成内存泄漏

虚析构改进:

image-20240906153707673

结果:

image-20240906153723278

posted @ 2024-09-06 15:38  Neko_Code  阅读(4)  评论(0编辑  收藏  举报