【发布时间】:2013-08-31 10:47:27
【问题描述】:
这段代码不是我写的! 在 WebServer 类中,我们重载了 +=operator。该类使用动态分配的 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 ;
}
所以我们创建了一个新的动态分配的 WebPage 数组,其中一个对象具有额外的空间,然后我们将 wp 保存的值分配给它们,然后将我们想要添加到数组中的对象分配给它们。所以如果我删除delete[] wp;,程序仍然可以正常工作。那么如果我删除那行代码会发生什么?还有wp=tmp,这是什么意思,wp只是动态的一个新名称,所以它适合类中的名称,但内存中的位置仍然相同?还是?
【问题讨论】:
-
如果您不释放/删除动态分配的数组,它们不会被释放/删除。就是这样。
-
使用
vector<WebPage>它会自动删除自己,并有一个push_back函数来向现有数组添加新元素。 -
当你不删除动态分配的内存时,一个可怕的诅咒就会发生,你的手指和你触摸的任何东西都会变成金子......鱼。所以你不能再写代码了。而且你必须把手放在水下。
标签: c++ class object dynamic-allocation