首页 > 编程语言 >Effective C++ - 条款7 - 关于基类的virtual析构和non-virtual析构

Effective C++ - 条款7 - 关于基类的virtual析构和non-virtual析构

时间:2022-10-04 12:56:14浏览次数:51  
标签:non derived virtual base 析构 class

  1. 如果基类的析构是non-virtual的,在使用base class指针指向一个derived对象,并且这个对象由base class指针删除时,derived对象的成分并没有被删除,原因是base class定义了一个non virtual析构(因此无法动态绑定)。所以目前看解决方法就是把这个base class定义一个virtual析构。
  2. (不太理解,需要一些virtual pointer和virtual table和不同语言之间传递对象的知识)一个关于可移植性方面的考量。定义虚函数的class含有一个virtual pointer和一个virtual table,该virtual pointer占用运行时计算机体系结构的指令宽度,在32位系统中,vptr占32bit。
  3. 只有class内含有至少一个virtual函数,才把析构声明为virtual。(因为通过动态绑定可能在运行时调用derived的函数,因此需要调用dervied的析构)
  4. 即使处理不含virtual函数的base class时,也可能会出现问题。比如base class的析构是non-virtual的,使用一个base指针指向derived对象,在释放这个base指针时,derived的对象资源仍然泄漏。(所以在C++11之后,应该把这个场景中的base class定义为final,以防止此场景出现)

标签:non,derived,virtual,base,析构,class
From: https://www.cnblogs.com/ijpq/p/16753596.html

相关文章