请各位老师再来指点一下
不知道我对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 编辑 ] 我觉得对阿。 回LZ,我不是老师,是跟着等老师的。哈。 1 这种情况肯定不需要delete,即没有指针也没有动态分配内存。 2 的情况,new了以后就需要delete和他配对出现。
用完了就需要释放内存。
我认为最后来个 delete Y[]; 就可以了。 原帖由 kaile 于 9-2-2010 21:30 发表 http://www.freeoz.org/bbs/images/common/back.gif
2 的情况,new了以后就需要delete和他配对出现。
用完了就需要释放内存。
我认为最后来个 delete Y[]; 就可以了。
Y不是数组也可以这么用吗?还有,是不是delete []Y 阿? C++中new出来的对象必须要用delete释放,否则会引起内存泄漏。1的情况下对象在栈中创建,当函数返回时,对象会被自动释放;2的情况下对象在堆中被创建,由指针引用,当函数返回是,只清空指针变量本身所占用内存空间,而指针指向的对象不会被自动释放。 应该是delete []Y
很长时间不写程序了,只搞代购,功力退步了
:$
:$ :$ 原帖由 四香油饼 于 5-2-2010 17:24 发表 http://www.freeoz.org/bbs/images/common/back.gif
不知道我对vector和new/delete的这几个理解对不对:
加入我有一个class ABC, 然后定义了 vector X, vector Y,
然后程序里面的这两种情况
1.
for (int i=0; i
你的理解都对。一定要在你的Y出有效范围之前,释放掉用new分配的内存。就是for (int i=0; i<10; i++)
{
X.push_back(ABC(i));
}
for (int i=0; i<10; i++)
{
Y.push_back(new ABC(i));
}
for (int i=0; i<10; i++)
{
delete Y;
}记住,用过多少个new,就要有多少个delete来保障内存释放。
但是:delete [] Y是不对的。你的Y是一个vector,也就是说,它只是一个变量,而不是一个数组。而且本身Y也不是个用new分配内存的变量,所以,不能delete Y,当然更不能delete [] Y了。
还有一个小错:(int i=0; i<10; i++)呵呵。 油饼学c++很用心啊。鼓励鼓励~
页:
[1]