游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2604|回复: 7

vc里的指针都是智能指针?

[复制链接]

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2008-4-3 07:53:00 | 显示全部楼层 |阅读模式
void main()
{
int *p = new int[100000000];
}
执行到new的时候程序的内存使用达到了几百兆,分配的空间在程序退出的时候自动释放了。
难道vc里的指针都是智能指针?我用的是vc++2008,是和具体的 IDE 有关吗?

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2008-4-3 08:34:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

进程退出的时候操作系统会自动回收分配给这个进程的所有资源.不论任何内存泄露在进程退出之后都不复存在.
这个是在操作系统层面实施的.操作系统会自动管理分配给所有进程的系统资源.所以如果你认为是智能的也对.

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2008-4-3 10:50:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

哦,原来是这样,谢谢wildfire的回答
那么全局的资源new出来就可以不用管了对吗?

22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2008-4-5 21:49:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

在整个程序运行的时候怎么办?
int* g_test=NULL;
void DoTings(int* );
main(void)
{
   for(int i=0;i<10000;i++){
      g_test=new int[100000];
      DoThings(g_test); //这里没有释放指针
   }
}

会死机的,兄弟。


还有智能指针的概念,在C++operator关键字下面,让一个一个对象重载了++,*等运算符,导致其行为很像指针行为,所以称其为“智能指针(intelligence pointer)”,STL里面的诸多iterator就是。不是什么指针都可以叫做只能指针的。think in C++一书有详细解释。

22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2008-4-5 21:53:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

忘了还有windows内核对象,比如消息体(还有什么我忘了,反正一堆吧),在一个程序释放后,操作系统不会马上析构他,会保留一段时间,这个时间里,windows的内存时消耗的。如果程序行为很不友好,一个简单的循环就可以然内核对象overload,然后死机,或是半天没有反应。

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2008-4-6 10:34:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

呃,应该是auto_ptr,谢谢flarez的详细解释,看来还是该delete的时候就delete。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-4-7 12:59:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

auto_ptr不知道用得多不多,如果想用智能指针,可以用boost的。
另外据说C++0x标准会加入可选的垃圾回收,而且把boost的一些库纳入标准库了,包括智能指针和正则表达式

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-4-7 13:02:00 | 显示全部楼层

Re:vc里的指针都是智能指针?

释放是个好习惯,也见过一些不释放的例子,有些程序实现的Singleton和内存池就没释放,不过如果用了内存以外的资源,比如windows的内核对象,就得注意了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 22:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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