c++ - 为什么我不能使用指向派生类指针的基类类型分配内存?

标签 c++ pointers inheritance memory

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/

相关文章:

c - Realloc 操作超出其范围的数据

使用 C 中的一些通用函数调用来调用多个函数

C++ 继承和成员函数指针

Java 泛型 : compatible service subclass

c++ - 为什么无法访问基类的函数重载

c++ - "see below"用作类型或异常规范时意味着什么?

c++ - C++ 协方差返回类型的缺点是什么?

c++ - C++中声明指针指针的效率

c++ - 用于解析 C++ 中重复日期描述的库?

c++ - 如何使用 std::multimap 将整数键映射到用作多维数组坐标的两个整数值(对于 Tic Tac Toe)?