Когда вы переопределяете функцию-член, которая не является виртуальной, в классе без виртуальных функций, компиляторы 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, но компилятор пропускает его и не может получить точный размер заголовка?
Кто-нибудь может получить мое любопытство по поводу этого разбитого?
Заранее спасибо.