关于delete字符串 需不需要加 [ ]

今天在写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了第一个字符呢?

原文地址:https://www.cnblogs.com/Luweir/p/14147442.html