让我们一个C++例如:C++ vtable究竟是如何工作的? (与实施例中的Q值。)
class A
{
public:
A() { cout << "hey" << endl; }
~A() { cout << "by" << endl; }
};
class B : public A
{
public:
B() {}
virtual ~B() { cout << "from b" << endl; }
};
int main()
{
A * a = new B[5];
delete[] a;
return 0;
}
此代码的结果是“是”的无限循环,这是为什么? B虚表应该被upcast到没有vtable的A,所以我希望它在尝试访问虚拟构造函数时抛出一个异常。
p.s. 在哪里我可以阅读各种有线构造函数析构函数的行为举例? (附范例)
[何时使用虚拟析构函数?](https://stackoverflow.com/questions/461203/when-to-use-virtual-destructors) – CoryKramer
@CoryKramer我不认为这是完全重复的,OP不理解为什么只在派生类中创建虚拟驱动器不起作用。 – Slava
欢迎来到Stack Overflow。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –