码迷,mamicode.com
首页 > 编程语言 > 详细

c++中的new 和delete

时间:2015-06-22 09:51:59      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

  new是用来动态申请内存空间的C++中的一个关键字。delete是用来删除new所申请空间对象的。

  想深入理解new请看:http://blog.csdn.net/songthin/article/details/1703966

  

  delete p和delete [] p的区别:

    1、int* p = new int(20);

         delete p;

    2、int*p = new int[10]();//数组带初始化

        delete [] p;

  从上面两个小例子,可以看出delete p 用来删除单个元素,而delete [] p用来删除数组元素。注意:当删除数组元素时如果使用delete [] p 编译也会是正确的,但意思就不同了。

 

关于delete后的野指针:

    如上1,2所示,当删除指针后,该指针变成悬垂指针(dangling pointer).悬垂指针指向曾经存放对象的内存,但该对象已经不存在了。  悬垂指针往往导致程序错我,而且一般很难检测出来。所以一旦删除了对象就立即将指针设置为0,例如 delete p; p = NULL;

   下面是一个关于悬垂指针的列子:引用原文http://blog.sina.com.cn/s/blog_6405313801013jvg.html  

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int *p = new int;
  6. *p = 3;
  7. cout<<"将3赋给p的地址后,指针p读取的值:"<<*p<<endl;
  8. delete p;
  9. cout<<"删除空间后,指针p读取的值:"<<*p<<endl;
  10. long *p1 = new long;
  11. *p1 = 100;
  12. cout<<"p1的值:"<<*p1<<endl;
  13. cout<<"p的值:"<<*p<<endl;
  14. cout<<"创建新空间后,指针p中保存的地址:"<<p<<endl;
  15. cout<<"指向新空间的指针p1保存的地址:"<<p1<<endl;
  16. *p = 23;
  17. cout<<"将23赋给p的地址后,指针p读取的值;"<<*p<<endl;
  18. cout<<"将23赋给p的地址后,指针p1读取的值:"<<*p1<<endl;
  19. delete p1;
  20. return 0;
  21. }  

运行结果:

技术分享

 以上代码可以看出,删除后的指针p和新建的指针p1指向的是同一块内存,出现这种状况的原因其实是由于编译器。编译器默认将释放掉的内存空间回收然后分配给新开辟的空间。

 欢迎赐教!

c++中的new 和delete

标签:

原文地址:http://www.cnblogs.com/nobbyoucanyouup/p/4592911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!