gpt4 book ai didi

c++ - 动态内存分配-为什么程序末尾没有 "delete"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:46 25 4
gpt4 key购买 nike

我有 2 个关于以下程序的问题:1. 程序是只创建动态元素(矩形和六边形类型),还是指向它们的指针也是动态的?

2.为什么程序最后没有delete。例如这样的事情:(如果我正确地假设只有元素是动态的..)

for(i=0;i<3;i++)
delete shapeArray[i];

非常感谢,这个网站在我的老师无法帮助的事情上帮助了我很多!石然

程序是:

 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;
}

最佳答案

  1. 您的程序在堆栈上创建一个指向 Shape 的指针数组。数组大小在编译时根据初始化列表 {} 的长度已知。初始化列表中的每个元素都是通过 operator new 在堆上创建的 Shape 的地址。

  2. 不释放内存是一种糟糕的做法,您的操作系统将在程序退出时释放分配的动态内存,因此在这种特殊情况下不会产生任何后果,但不删除内存可以进行检测“真正的”内存泄漏更加困难。

关于c++ - 动态内存分配-为什么程序末尾没有 "delete"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13891388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com