在 c++ 中使用堆内存

Use Heap Memory in c++

本文关键字:内存 c++      更新时间:2023-10-16

我有3个类,Shape是我的基类,矩形和三角形是我的派生类。

我想将派生类中的四个对象存储到 Shape 的指针中。

Shape* sh1=new Shape[4];
Rectangle aR(2,3);
Rectangle bR(4,5);
Triangle aT(2,3);
Triangle bT(4,5);
sh1[0]=&aR;
sh1[1]=&bR;
sh1[2]=&aT;
sh1[3]=&bT;

但我对此有问题,我该如何解决它?

我可以做到

Shape* sh1[4];
Rectangle aR(2,3);
Rectangle bR(4,5);
Triangle aT(2,3);
Triangle bT(4,5);
sh1+0=&aR;
sh1+1=&bR;
sh1+2=&aT;
sh1+3=&bT;

但是为什么我不能做第一种方法呢?

你的意思是Shape **sh1 = new Shape*[4];.您需要一个指针数组,而不是形状数组。如果你把你的Shape类抽象化,你也应该得到一个非常有用的诊断。

当然,您根本不应该使用 new,而是使用容器:

std::vector<Shape*> sh2 = {&aR, &bR, &aT, &bT};

因为变量"sh1"是指向形状的指针,所以"sh1[0]"是形状!

不能将指向形状的指针分配给形状。

因此

sh1[0] = &aR 

是错误的。

请记住,在 C/C++

sh1[i] is equal to *(sh+i)

再见