关于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了第一个字符呢?
关于delete字符串 需不需要加 [ ]相关推荐
- 条款51:编写new和delete时需固守常规
/*编写new和delete时需固守常规*/ //非附属对象必须有独立的大小 #include<iostream> using namespace std; class Base{ pub ...
- C语言字符数组与字符串的使用及加结束符‘\0‘的问题
1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...
- 注解RequestMapping中的URI路径最前面到底需不需要加斜线?
注解RequestMapping中的URI路径最前面到底需不需要加斜线? 您有没有这样的困惑:在协同开发过程中,使用RequestMapping,或者是GetMapping,或者是PostMappin ...
- iview 按需引入解决加载慢的问题
iview 按需引入解决加载慢的问题 参考文章: (1)iview 按需引入解决加载慢的问题 (2)https://www.cnblogs.com/ToBeBest/p/9645126.html 备忘 ...
- Effective C++(编写new和delete时需固守常规)
author: luixiao1223 title: 编写new和delete时需固守常规 new 如果顺利返回指针 如果不顺利, 调用new handler(希望它可以做些什么). 如果没有new ...
- 51 编写 new 和delete 时需固守常规
51 编写 new 和delete 时需固守常规 必须遵守的规则 须得返回正确的值: 内存不足时须得调用new-handling 函数: 须有对付零内存需求的准备: 避免掩盖正常形式的 new 或者 ...
- C语言:输入某年某月某日,判断这一天是这一年的第几天? 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天. 首先画下设计流程图: 源程序: #include<stdio.h> ...
- 《Effective C++》学习笔记(条款51:编写 new 和 delete 时需固守常规)
最近开始看<Effective C++>,为了方便以后回顾,特意做了笔记.若本人对书中的知识点理解有误的话,望请指正!!! 条款50 讨论了什么时候需要自定义 operator new 和 ...
- 编写new和delete时需固守常规——条款51
条款50已解释什么时候你会想要写个自己的operator new和operator delete,但并没有解释当你那么做时必须遵守什么规则.这些规则不难奉行,但其中一些并不直观,所以知道它们究竟是些什 ...
最新文章
- Go 学习笔记(50)— Go 标准库之 net/url(查询转义、查询参数增/删/改/查、解析URL)
- 存在描述所有生命的方程吗?
- Google ToolBar 3.0 Beta试用
- Leetcode--72.编辑距离(java)
- JavaScript代码规范和性能整理
- Java面试题--HashMap是什么?
- codevs 1191 树轴染色 线段树区间定值,求和
- HexEdit Linux下命令集
- Hark的数据结构与算法练习之梳排序
- Java clone克隆方法 --深拷贝--浅拷贝 --原型模型
- 站在两个世界的边缘 程浩,一个认真生活过的人
- 如何选择剑桥英语KET,PET课程和老师
- 用python绘制叠加等边三角形_使用turtle库绘制叠加等边三角形
- Python小黄人绘制
- 主播必备超萌代打猫咪,超人气全键盘版资源下载~
- thinkDifferent思维糖果
- 1155网址大全:打造简单实用的网址导航
- IDEA配置远程debug
- 计算机视觉(CV)方向今年招聘情况怎么样?是否已经人才过剩?
- 计算机游戏的作文,电脑游戏作文3000字初一_查字典作文网