c++ - 如果我不释放/删除动态分配的数组会发生什么?

标签 c++ class object dynamic-allocation

这段代码不是我写的! 在 WebServer 类中,我们重载了 += 运算符。该类使用动态分配的 WebPage 类型对象数组(另一个类,组合)定义为 WebPage *wp;

WebServer & operator +=( WebPage webPage ) {
WebPage * tmp = new WebPage [ count + 1];
for (int i = 0; i < count ; i ++)
tmp [i] = wp[i];
tmp [ count ++] = webPage ;
delete [] wp;
wp = tmp;
return * this ;
}

因此我们创建了一个新的动态分配的网页数组,其中有一个对象的额外空间,然后我们为它们分配 wp 持有的值,然后是我们想要添加到数组中的对象。所以如果我删除 delete[] wp; 程序仍然可以正常工作。那么如果我删除那行代码会发生什么?还有 wp=tmp,这是什么意思,wp 只是一个动态的新名称,所以它适合类中的名称,但内存中的位置仍然相同?或者?

最佳答案

So if i remove delete[] wp; the program still works ok. So what happens if i remove that line of code?

你已经介绍了一个memory leak .每次调用此运算符时,进程都会浪费其地址空间的一部分,直到最终耗尽内存。

And also wp=tmp, what does that mean, is wp only a new name for that dynamically so it would suit the name in the class, but the location in memory is still the same? Or?

wp 大概是 WebServer 的一个成员(一个实例变量),它保存着它所服务的 WebPage 对象的实例。因此,该行正在用一个新值(包括刚刚添加到服务器的网页)替换之前的网页数组。

大概还有 WebServer 的其他成员函数读取 wp 中的值并用它们做一些事情。

作为一般注意事项,您应该意识到这段代码写得非常糟糕,因为它甚至不是远程异常安全的,它正在做的工作可以通过更智能的实现来避免,而且最重要的是它使用自制代码代替标准语言工具,如 std::vector

关于c++ - 如果我不释放/删除动态分配的数组会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486596/

相关文章:

flash - Actionscript 对象的属性数

c++ - 为每个测试用例或整个测试套件调用谷歌测试函数 setup() 和 teardown()

调整 CSS 类填充的 jQuery 代码

c++ - 为什么这个 Makefile 无法构建项目?

class - python 3 中的 types.ClassType 发生了什么?

arrays - 使用数组定义类中方法的名称

javascript模块扩展嵌套对象

javascript - 如何使用扩展语法有效地从关联数组中删除项目

c++ ifstream,从文件读取崩溃

c++ - C++ 中具有十六进制值的数组