关于new和delete

Posted on 2010-04-07 10:42 rikisand 阅读(447) 评论(1)  编辑 收藏 引用

良好的编程风格是:new和delete 配套使用,即如果使用new [] 则使用delete []

事实上,如果我们使用的是自定义类型int char等,或者我们使用的是没有内存申请的类,我们使用 delete A;并不会发生什么不好的事情。

这是由delete 的语义决定的。当我们是申请一组对象时候,编译器会加入内存大小信息和此段内存相关联。因此当我们delte A 时,编译器会按照内存大小收回分给我们的内存。显然,如果是基本类型或者没有申请内存的情况这样的行为是良好的。但是如果我们在自建类型中申请了内存~对不起,编译器是不知道的,这些申请的内存就是内存泄露,随着程序不断进行,堆不断地被侵蚀·····

这就是delete的第二个作用,他会施加析构函数在我们申请的内存上,如果我们delete A,只会在第一个上施加,而如果delete [] A;他会对数组中每一个元素进行析构~~

so····

试验很容易做,写两个类,一个申请内存,一个普通的类,然后循环申请大量数组,但是用 delete A 形式,然后看看内存占用就行了

Feedback

# re: 关于new和delete  回复  更多评论   

2010-04-07 18:04 by 陈梓瀚(vczh)
从标准上来说,delete一个int*可以完全认为你只释放4个字节。至于真的会去看有多长,那是VC++施舍给你的。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理