gpt4 book ai didi

c++ - 在 C++ 中重写非虚函数时出错

转载 作者:太空宇宙 更新时间:2023-11-04 16:30:09 29 4
gpt4 key购买 nike

当您在没有虚函数的类中重写非虚成员函数时,VS 编译器会出现“_BLOCK_TYPE_IS_VALID”错误。

例如,

class A{
public:
int a;
public:
void func(){}
~A(){}
};

class B : public A{
public:
virtual void func(){}

~B(){}
};

int main(void){
A* a = new B();
delete a; // error!

return 0;
}

我猜这是因为在 main() 中,a 有 vtable 但编译器错过了它并且无法获得 header 的确切大小?

有人能打消我对此的好奇心吗?

提前致谢。

最佳答案

你可以删除A::func(),程序仍然出错。

真正的原因是A::~A()(不是B::~B())被类型的对象调用B.

参见 C++ FAQ § 20.7 “什么时候我的析构函数应该是 virtual?”

关于c++ - 在 C++ 中重写非虚函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7974894/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com