delete内存前判断该内存是否为空是不是一个很必须的步骤

woneedjob 2010-01-12 12:07:47
下面两个函数代码是林锐书上string类的赋值函数和析构函数。
关于这两个函数中delete内存有点小疑问。如下所示:

String String::operator=(const String &other)
{
if (this!=&other)
{
char *temp = new char[strlen(other.m_data)+1];
strcpy(temp,other.m_data);
delete []m_data ;//这里是不是应该改为if(m_data!=NULL)delete []m_data更合理呢
m_data = temp;

}
return *this;
}
String::~String()
{
delete []m_data;//这里是不是应该改为if(m_data!=NULL){delete []m_data;m_data = NULL;}更好呢?
}


...全文
289 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng_ai 2011-08-29
  • 打赏
  • 举报
回复
delete后最好置为NULL,以避免“野指针”。
Mcgrday 2010-03-24
  • 打赏
  • 举报
回复
接着楼主的问题请教一下:
String::~String()
{
delete []m_data;
}
delete之后有没有必要m_data = NULL;
麻菜 2010-01-12
  • 打赏
  • 举报
回复
@学习了
失落的凡凡 2010-01-12
  • 打赏
  • 举报
回复
不用
aaajj 2010-01-12
  • 打赏
  • 举报
回复
不作判断也可以

if (m_data == NULL)
{
delete []m_data;//没有问题
}
飞天御剑流 2010-01-12
  • 打赏
  • 举报
回复
不需要,delete可以接受空指针,遇到空指针delete将其忽略,啥都不做。

64,637

社区成员

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

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