new带有虚函数的对象数组,调用方法时崩溃
抽象的基类
class base
{
public:
base(){}
virtual ~base(){}
virtual void close() = 0;
};
派生类:
class derive:public base
{
public:
derive(){}
virtual ~derive(){}
virtual void close() override
{
printf("derive::close\n");
}
private:
uint32_t mDevice;
};
调用代码:
int main(int argc,char** argv)
{
base * ptr = new derive[2];
ptr[0].close();
ptr[1].close();
return 0;
}
运行结果:
第一个close能成功调用,调用第二个close,程序崩溃。
尝试
把 派生类的成员 mDevice 注释掉就不会崩溃了。
把 基类和派生类的 虚函数 去掉,也不会崩溃。
所以怀疑是不是这样生成对象数组,虚函数指针有什么问题?
请哪位明白的解释一下,谢谢。