杭州达内嵌入式培训火热招生中。。。|杭州达内c++培训火热招生中
您现在的位置: 杭州达内 >>C/C++>>delete加 [ ] 的问题探讨
delete加 [ ] 的问题探讨
杭州达内 - C/C++ 来源:未知 发布时间:2013-09-26 10:11

首先用一个类开头:
class A
{
public:
A(){cout<<"A Create!"<<endl;}
~A(){cout<<"A Delete!"<<endl;}
};
void main()
{
A *a = new A[5];
delete a;
}
输出 5 个A Create 和 1 个 A Delete。如果加上 [] 就正常了。这是理所当然了的~

现在来试一下char类型:
void main()
{
char a[]={"hello"}
char *c = new char[6];
strcpy(c,a);
delete c;
}
调试运行时,观察 *c 和 *(c+1),执行strcpy后 *c='h' *(c+1)='e',运行完delete后发现*c和*(c+1)都被删除掉了,说明不用加[]也可以,这里就好奇怪了。

如果说char跟string有联系,可能会默认做些什么,那么用int再试了一下

void main()
{
        int a[]={1,2,3,4,5};
int *b=new int[5];
memcpy(b,a,sizeof(int)*5);
delete  b;

调试运行,观察 *b 和 *(b+1),memecpy后 *b = 1,*(b+1)=2,delete后*b和后面的内容也都被删除掉了,这是为什么?
 

网友A回复:

基本类型貌似可以这么用
还是不推荐这么用

网友B回复:

较好还是 加上delete[]

网友C回复:

delete加上[]会传入删除的大小,否则只删除个


相关标签:达内 达内培训(210)
 达内简介 达内就业 达内课程 联系我们 网站导航
杭州达内为上软件有限公司 Copyright @ 2007-2012 版权所有 苏ICP备10118953号-1
分享到: