找回密码
 FreeOZ用户注册
查看: 1443|回复: 9
打印 上一主题 下一主题

[论坛技术] 请各位老师再来指点一下

[复制链接]
跳转到指定楼层
1#
发表于 5-2-2010 17:24:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
不知道我对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 编辑 ]
回复  

使用道具 举报

2#
发表于 5-2-2010 22:36:18 | 只看该作者
我觉得对阿。

评分

参与人数 1威望 +49 收起 理由
四香油饼 + 49 谢谢指点

查看全部评分

回复  

使用道具 举报

3#
发表于 7-2-2010 09:29:20 | 只看该作者
回LZ,我不是老师,是跟着等老师的。哈。
回复  

使用道具 举报

4#
发表于 9-2-2010 21:27:35 | 只看该作者
1 这种情况肯定不需要delete,即没有指针也没有动态分配内存。
回复  

使用道具 举报

5#
发表于 9-2-2010 21:30:18 | 只看该作者
2 的情况,new了以后就需要delete和他配对出现。

用完了就需要释放内存。

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

使用道具 举报

6#
 楼主| 发表于 9-2-2010 22:55:21 | 只看该作者


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

使用道具 举报

7#
发表于 9-2-2010 23:55:25 | 只看该作者
C++中new出来的对象必须要用delete释放,否则会引起内存泄漏。1的情况下对象在栈中创建,当函数返回时,对象会被自动释放;2的情况下对象在堆中被创建,由指针引用,当函数返回是,只清空指针变量本身所占用内存空间,而指针指向的对象不会被自动释放。
回复  

使用道具 举报

8#
发表于 10-2-2010 03:05:25 | 只看该作者
应该是delete []Y

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

回复  

使用道具 举报

9#
发表于 16-2-2010 16:52:34 | 只看该作者
原帖由 四香油饼 于 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++)
复制代码
呵呵。
回复  

使用道具 举报

10#
发表于 16-2-2010 16:54:01 | 只看该作者
油饼学c++很用心啊。鼓励鼓励~
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 13-12-2024 00:38 , Processed in 0.047564 second(s), 28 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表