FreeOZ论坛

标题: 请各位老师再来指点一下 [打印本页]

作者: 四香油饼    时间: 5-2-2010 16:24
标题: 请各位老师再来指点一下
不知道我对vector和new/delete的这几个理解对不对:

加入我有一个class ABC, 然后定义了 vector<ABC> X, vector<ABC*> Y,

然后程序里面的这两种情况

1.
for (int i=0; i<10; i++)
{ X.push_back(ABC(i)); }

2.
for (int i=0; i<10, i++)
{  Y.push_back(new ABC(i)); }

是不是1的情况不用考虑delete,vector自己会在退出前自动释放内存,而2的情况必须在Y.pop_back()或者程序退出前delete Y[i]?

我的理解对吗?

[ 本帖最后由 四香油饼 于 5-2-2010 17:25 编辑 ]
作者: GPS    时间: 5-2-2010 21:36
我觉得对阿。
作者: GPS    时间: 7-2-2010 08:29
回LZ,我不是老师,是跟着等老师的。哈。
作者: kaile    时间: 9-2-2010 20:27
1 这种情况肯定不需要delete,即没有指针也没有动态分配内存。
作者: kaile    时间: 9-2-2010 20:30
2 的情况,new了以后就需要delete和他配对出现。

用完了就需要释放内存。

我认为最后来个 delete Y[]; 就可以了。
作者: 四香油饼    时间: 9-2-2010 21:55
原帖由 kaile 于 9-2-2010 21:30 发表
2 的情况,new了以后就需要delete和他配对出现。

用完了就需要释放内存。

我认为最后来个 delete Y[]; 就可以了。


Y不是数组也可以这么用吗?还有,是不是delete []Y 阿?
作者: beysup    时间: 9-2-2010 22:55
C++中new出来的对象必须要用delete释放,否则会引起内存泄漏。1的情况下对象在栈中创建,当函数返回时,对象会被自动释放;2的情况下对象在堆中被创建,由指针引用,当函数返回是,只清空指针变量本身所占用内存空间,而指针指向的对象不会被自动释放。
作者: kaile    时间: 10-2-2010 02:05
应该是delete []Y

很长时间不写程序了,只搞代购,功力退步了


作者: coolmate    时间: 16-2-2010 15:52
原帖由 四香油饼 于 5-2-2010 17:24 发表
不知道我对vector和new/delete的这几个理解对不对:

加入我有一个class ABC, 然后定义了 vector X, vector Y,

然后程序里面的这两种情况

1.
for (int i=0; i

你的理解都对。一定要在你的Y出有效范围之前,释放掉用new分配的内存。就是
  1. for (int i=0; i<10; i++)
  2. {
  3.     X.push_back(ABC(i));
  4. }
  5. for (int i=0; i<10; i++)
  6. {
  7.     Y.push_back(new ABC(i));
  8. }
  9. for (int i=0; i<10; i++)
  10. {
  11.     delete Y[i];
  12. }
复制代码
记住,用过多少个new,就要有多少个delete来保障内存释放。

但是:
  1. delete [] Y
复制代码
是不对的。你的Y是一个vector,也就是说,它只是一个变量,而不是一个数组。而且本身Y也不是个用new分配内存的变量,所以,不能delete Y,当然更不能delete [] Y了。

还有一个小错:
  1. (int i=0; i<10[color=Red];[/color] i++)
复制代码
呵呵。
作者: coolmate    时间: 16-2-2010 15:54
油饼学c++很用心啊。鼓励鼓励~




欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/) Powered by Discuz! X3.2