class a
{
int var;
}
class b :public a
{
int var2,var3;
}
int main()
{
a *poi;
poi=new b;
//b *poi2;
//poi2=new a;
return 0
}
在上面的代码中,我能够使用指向基类指针变量的派生类类型分配内存。
即,a *poi=new b;
但是我无法使用指向派生类指针的基类类型分配内存。
即 b *poi=new a;
为什么下面的内存分配是不可能的? 背后的逻辑是什么?
最佳答案
这不是关于内存分配而是关于继承。
Fruit* f = new Apple
效果不错,但是
Apple* a = new Fruit
会给你一个不完整的苹果,甚至是香蕉,所以编译器不允许你这样做。
两个指针的大小相同,您可以使用 unsafe static cast 将水果指针存储到苹果指针中,但你应该避免这样做
关于c++ - 为什么我不能使用指向派生类指针的基类类型分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21162490/