我发现了这样的代码
#include <iostream>
class A
{
public:
A()
{
std::cout << "cA" << std::endl;
}
virtual ~A()
{
std::cout << "dA" << std::endl;
}
char a[11];
};
class B : public A
{
public:
B()
{
std::cout << "cB" << std::endl;
}
~B()
{
std::cout << "dB" << std::endl;
}
char a[21];
};
int main()
{
{
A* aa = new B[5];
std::cout << "==============" << std::endl;
delete[] aa;
}
return 0;
}
在VC ++编译器中运行良好,但在GCC编译时失败。我理解为什么使用这样的数组可能是个坏主意(感谢Meyers),但它在VC ++中是如何工作的?它是在数组之前存储真实对象的大小吗?