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

  • 相关阅读:
    Leetcode#179 Largest Number
    Leetcode#155 Min Stack
    Leetcode#14 Longest Common Prefix
    Leetcode#101 Symmetric Tree
    Leetcode#172 Fractorial Trailing Zero
    Leetcode#28 Implement strStr()
    Leetcode#46 Permutations
    Leetcode#48 Rotate Image
    Leetcode#134 Gas station
    Leetcode#137 Single Number II
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147442.html
Copyright © 2011-2022 走看看