申请内存空间:delete和delete[]的区别
来源:优易学  2011-12-13 13:25:16   【优易学:中国教育考试门户网】   资料下载   IT书店
  一道面试题是关于内存空间的申请
  char *p=NULL;
  p=new char[10];
  delete p;
  这是道改错题,在网上看到delete后没有[]是释放数组的空间,以为这句话有错就改成
  delete []p;
  后还想想好象也没错就划了没改,今天用了一小天的时间研究了下这个问题。
  void main()
  {
  char *p=NULL;
  p=new char[10];
  delete[] p;
  //delete p;
  }
  对于简单的数据类型delete []p 和 delete p是一样的。以为在p=new char[10]的时候在p前13-16位代表数组的大小(
  前1-12位不知道表示啥)delete p可以知道数组的大小所以delete []p和delete p结果一样。但对于对象数组就不一样
  了如:
  void main()
  {
  class a
  {
  public :
  char *m_pName;
  a()
  {
  m_pName=new char[5];
  cout<<"a()"<<endl;
  }
  ~a()
  {
  delete []m_pName;
  cout<<"~a()"<<endl;
  }
  };
  a* c=NULL;
  c=new a[2];
  delete []c;
  }
  如果用delete c的话可以释放a[0]的空间时执行~a()结束时会报错,具体原因没查到。看见有的帖子说在<<effective c++>>和<<more effective c++>>中有详细的介绍。青年人网提示如果没有析构函数不报错。
  但还是new[] 和delete[]。new和delete成对的用好。
  关于malloc和free是c语言里的new和delete是c++里的申请内存操作。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训