四香油饼 发表于 5-2-2010 16:24:07

请各位老师再来指点一下

不知道我对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:18

我觉得对阿。

GPS 发表于 7-2-2010 08:29:20

回LZ,我不是老师,是跟着等老师的。哈。

kaile 发表于 9-2-2010 20:27:35

1 这种情况肯定不需要delete,即没有指针也没有动态分配内存。

kaile 发表于 9-2-2010 20:30:18

2 的情况,new了以后就需要delete和他配对出现。

用完了就需要释放内存。

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

四香油饼 发表于 9-2-2010 21:55:21

原帖由 kaile 于 9-2-2010 21:30 发表 http://www.freeoz.org/bbs/images/common/back.gif
2 的情况,new了以后就需要delete和他配对出现。

用完了就需要释放内存。

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

Y不是数组也可以这么用吗?还有,是不是delete []Y 阿?

beysup 发表于 9-2-2010 22:55:25

C++中new出来的对象必须要用delete释放,否则会引起内存泄漏。1的情况下对象在栈中创建,当函数返回时,对象会被自动释放;2的情况下对象在堆中被创建,由指针引用,当函数返回是,只清空指针变量本身所占用内存空间,而指针指向的对象不会被自动释放。

kaile 发表于 10-2-2010 02:05:25

应该是delete []Y

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

coolmate 发表于 16-2-2010 15:52:34

原帖由 四香油饼 于 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++)呵呵。

coolmate 发表于 16-2-2010 15:54:01

油饼学c++很用心啊。鼓励鼓励~
页: [1]
查看完整版本: 请各位老师再来指点一下