我有两个关于下面程序的问题:1.程序是否只创建动态元素(类型矩形和六边形),还是指向它们的指针是动态的?
2.为什么程序最后没有删除.例如这样的事情:(如果我正确地假设只有元素是动态的..)
for(i=0;i<3;i++)
delete shapeArray[i];
Run Code Online (Sandbox Code Playgroud)
非常感谢,这个网站帮助了我很多老师无法帮助的事情!使然
该计划是:
int main()
{
// Create array of pointers to Shapes of various types.
const int NUM_SHAPES = 3;
Shape * shapeArray[] = { new Hexagon(),
new Rectangle(),
new Hexagon()
};
// Set positions of all the shapes.
int posX = 5, posY = 15;
for (int k = 0; k < NUM_SHAPES; k++)
{
shapeArray[k]->setPosition(posX, posY);
posX += 10;
posY += 10;
};
// Draw all the shapes at their positions.
for (int j = 0; j < NUM_SHAPES; j++)
{
shapeArray[j]->draw();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您的程序在堆栈上创建一个指向Shape的指针数组.数组大小在编译时从初始化列表{}的长度已知.初始化列表中的每个元素都是通过operator new在堆上创建的Shape的地址.
它们没有被释放的事实是糟糕的风格,你的操作系统将释放程序退出时分配的动态内存,因此在这种特殊情况下它不会产生一些后果,但是保留内存不会被删除会导致检测到"真正的"内存泄漏更加困难.
Den*_*lin -1
程序占用的所有内存将在操作系统退出后被释放,因此没有理由在这里删除它。
| 归档时间: |
|
| 查看次数: |
745 次 |
| 最近记录: |