delete [] m_data;与delete m_data;的问题?

lovegeng 2008-02-20 08:52:42
看高质量C++编程的时候有个地方没看懂,就是在String的析构函数中释放m_data时用delete [] m_data,但后面跟着有个注释“由于m_data 是内部数据类型,也可以写成 delete m_data;”,delete m_data不是只释放一个单元么?

m_data的定义是: char *m_data;

// String 的析构函数
String::~String(void)
{
delete [] m_data;
// 由于m_data 是内部数据类型,也可以写成 delete m_data;
}

// String 的普通构造函数
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = ‘\0’;
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
...全文
689 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
曾有一个人 2012-07-09
  • 打赏
  • 举报
回复
看看。。。
martin_08 2010-07-28
  • 打赏
  • 举报
回复
正好也碰到这样的问题,感谢!
sxrw123 2010-04-13
  • 打赏
  • 举报
回复
不懂什么学习下
wanghong_1359313 2009-10-13
  • 打赏
  • 举报
回复
hao de ahode de de de de de
sc_valentine21 2008-02-22
  • 打赏
  • 举报
回复
学习了
Seanxiaoxiao 2008-02-22
  • 打赏
  • 举报
回复
学习
xuegao007 2008-02-22
  • 打赏
  • 举报
回复
我问的问题找到答案了。
ttkk_2007 2008-02-21
  • 打赏
  • 举报
回复
一楼正解
yanningzi 2008-02-21
  • 打赏
  • 举报
回复
good
悠悠长风 2008-02-21
  • 打赏
  • 举报
回复
1楼乃是正解
星羽 2008-02-21
  • 打赏
  • 举报
回复
to Chiyer:
你的这方话又更权威的资料作证吗?
C++ Standard有说吗?
谢谢!


------

严谨的说是在系统默认的情况下,也就是你没重载new, new[], delete, delete[]
的情况下,对于释放内部数据类型的动态数组,delete, delete[]效果一样。

C++标准有没有说就不知道,这个应该还和编译器的实现有关,但一般情况下如此

不过,new, delete new[] delete[]配对使用是一个良好的习惯。

我只是解答搂住对他所看的书的疑问,给出书中的作者所说的原因。并不提倡滥用使用之意
xunuo20041101 2008-02-21
  • 打赏
  • 举报
回复
对于使用new申请的内存,如果是数组,必须使用delete[]释放
m_data是指针,如果指向数组,就要用delete[],否则用delete即可
imasmallbird 2008-02-21
  • 打赏
  • 举报
回复
菜鸟飞过!!
sunick1984 2008-02-21
  • 打赏
  • 举报
回复
又一只菜鸟飞过
独孤过儿 2008-02-21
  • 打赏
  • 举报
回复
内建数据类型是否可以我不知道,但是用户自定义的数据类型,星羽大哥解释的完全正确!

这也是malloc()/new和free()/delete的一个不同之处
anmoi_yang 2008-02-21
  • 打赏
  • 举报
回复
LZ: 这样的注释我也见过, 但是编程的时候(VC, BC都无法通过);
原则:有数组就用delete [], 非数组用delete.
visame 2008-02-21
  • 打赏
  • 举报
回复
to Chiyer:
你的这方话又更权威的资料作证吗?
C++ Standard有说吗?
谢谢!
swsjk 2008-02-21
  • 打赏
  • 举报
回复
学习学习
zsdhust 2008-02-20
  • 打赏
  • 举报
回复
gaoren
dream19861009 2008-02-20
  • 打赏
  • 举报
回复
学习了。。。
加载更多回复(5)

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧