虚函数申明为static报错
class Foo
{
public:
Foo()=default;
static virtual ~Foo(){}
};
int main()
{
Foo foo;
return 0;
};
main.cpp:10:25: error: member ‘~Foo’ cannot be declared both virtual and static
static virtual ~Foo()
代码编译会报错,不允许同时声明virtual和static
分析
虚函数,是一种特殊的成员函数,用来实现运行时多态;一定要通过对象来调用,有隐藏的this指针。
静态成员函数与任何实例无关,而是类的一个属性;可以不通过对象来调用,没有隐藏的this指针。
因此报错的关键就是static成员没有this指针。
-
static function
是静态决议, 在编译期就确认函数入口地址
-
virtual function
是动态决议, 在运行期动态确认函数入口