今天在写C++练习题时产生一个疑惑:
new出字符数组后 需不需要在delete时加 [ ]
按道理 只要是数组应该都要加的,但是答案没有加,于是晚上回来上机运行
环境:DevC++
#include<iostream>
#include<cstring>
using namespace std;
//有一些些成员是之前用到的 不过不影响测试
class cbase
{
public:
cbase(int i,char *p_r)//构造函数
{
m_data=i;
cout<<"constructure of cbase.m_data="<<m_data<<endl;
//new出连续内存用来复制 p_r所指向的内容
p_name=new char[strlen(p_r)+1];
strcpy(p_name,p_r);
}
cbase(cbase &a)//拷贝构造函数
{
m_data=a.m_data;
p_name=new char[strlen(a.p_name)+1];
strcpy(p_name,a.p_name);
}
~cbase()//析构函数
{
delete []p_name;//第一次加上[]
//delete p_name;//第二次 不加[]
cout<<"destructor of cbase.m_data="<<m_data<<endl;
}
void get_name()
{
cout<<"p_name="<<p_name<<endl;
}
protected:
int m_data;
char *p_name;
};
int main()
{
char str[10]="weishuai";
cbase p(1,str);
p.get_name();
return 0;
}
运行结果:
第一次:加 [ ]
第二次:不加 [ ]
总结:
单单从这两次测试可以看出 对于new出来的字符数组 delete时加不加 [ ], 都能得到释放,并且系统并未给警告;
不过还有一种可能 就是不加 [ ]的话,会不会只delete了第一个字符呢?