c++虚函数和纯虚函数的存储空间
时间: 2023-09-14 22:03:58 浏览: 119
C++中的虚函数和纯虚函数都会在类的虚函数表中存储。在含有虚函数的类中,编译器会在该类的对象中分配一个指向虚函数表的指针,这个指针被称为虚表指针(vptr)。当调用一个虚函数时,编译器会使用该对象的虚表指针去查找虚函数表中对应的函数地址并调用。
虚函数在虚函数表中有一个实际的函数指针,而纯虚函数没有实际的函数实现,只有函数声明,因此在虚函数表中会存储一个空指针作为纯虚函数的地址。
因此,虚函数和纯虚函数在编译时都会被分配到类的虚函数表中,不会占用对象的存储空间。虚表指针会占用对象的存储空间,但是它只会被分配一次,即使创建多个类的对象,也只有一个虚表指针。
相关问题
纯虚函数存储时比虚函数省空间吗?
在C++中,虚函数是通过虚函数表来实现的。每个包含虚函数的类都会有一个虚函数表,虚函数表的大小取决于类中的虚函数数量,因此不管是虚函数还是纯虚函数,它们都会占用类的存储空间。
但是,纯虚函数比虚函数在存储空间上略微节省一些,因为纯虚函数在虚函数表中只是一个指针,指向了该函数的实现,而虚函数在虚函数表中是一个函数指针,指向了一个虚函数的实现,并且还需要存储一个虚函数表指针来访问虚函数表。
总的来说,纯虚函数与虚函数在存储空间方面的差别非常小,不应该成为选择使用哪种函数形式的主要因素。
阅读全文