zoukankan      html  css  js  c++  java
  • 关于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了第一个字符呢?

  • 相关阅读:
    flask——flask-sqlachemy中的一对多,多对多关系
    flask——flask-sqlachemy的使用,模块划分
    Ubuntu下安装JDK和Open Jdk
    flask——全文检索
    Flask——部署
    在Ubuntu上安装Chrome浏览器和ChromeDriver
    jinja2模板语言的循环序号
    CentOS7安装mongodb
    CentOS7安装PhantomJS
    使用screen在后台运行程序
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147442.html
Copyright © 2011-2022 走看看