在某些情况下,指针的地址是否会发生变化

时间:2018-05-01 23:52:52

标签: c++ pointers dynamic-allocation

如果我创建一个类型为某个已定义类的指针的向量,并将指针指向其中第一个类型的继承类型的对象,则指向下一个地址的指针不会更改为指向移位的地址因为前一个指向的继承类中存在新数据成员。

所以如果我定义了一个具有new类型的基类的数组,然后放入一个类型为驱动类的对象,编译器将如何处理下一个指针的地址开始的修改。不应该移位或类似的东西来为前一个字节提供一些字节。

提前致谢

第一次修改 感谢Anon Mail有用的答案,让我编辑我的问题。

第二个。

在我的问题被标记为[持续]并且我被要求举例后,我试图提出image但我得到了答案

谢谢大家,我很抱歉John3136wallyuser4581301MacmadeGalik

1 个答案:

答案 0 :(得分:1)

如果您定义std::vector<BaseClass>,其中BaseClass是您的基类,然后将DerivedClass类型放入该向量中DerivedClass是您的派生类,您将获得切片。这意味着派生类中的任何额外数据成员都将丢失。

因此,您通常会定义一个std::vector<BaseClass *>,它是基类指针的向量。现在,您可以在向量中放置基类指针和派生类指针,并且没有切片。

您正在向量中存储指针。所有指针的大小都相同。

注意,在现实世界中,您可能不会使用原始指针,而是使用某些版本的智能指针来减少内存泄漏的可能性(即忘记释放指针)。