重载赋值操作符

sybtjp 2010-03-23 10:06:41
在重载赋值操作符的时候,为什么有写书没有判断指针成员变量是否为空就直接delete?
r如:

class string{
public:

string(const string & str);
string(const char *pchar);
string &operator(const string & str);
private:
char *m_pData;
int m_size;
};

string string::operator(const string & str)
{
if(*str == this)
return;
delete []m_pData; // 就这里.不是应该先判断吗?判断m_pdata是否为空吧,为空就没必要在删除了吧,请大家看看。

......

}

...全文
105 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sybtjp 2010-03-23
  • 打赏
  • 举报
回复
谢谢 结贴
cattycat 2010-03-23
  • 打赏
  • 举报
回复
一个是可以delete NULL的指针,好的习惯是判断一下。但是如果这个string的构造函数默认是分配空间的,这里就不用再判断了。
至善者善之敌 2010-03-23
  • 打赏
  • 举报
回复
我到觉得是申请的时候判跟合适,如果申请到了,那delete时候判不判无所谓了!!
up522641996 2010-03-23
  • 打赏
  • 举报
回复
同意2#的
pengzhixi 2010-03-23
  • 打赏
  • 举报
回复
你可以自己加上判断。
bsr2009 2010-03-23
  • 打赏
  • 举报
回复
要判断,删除的时候要置NULL。
linyongzuo 2010-03-23
  • 打赏
  • 举报
回复
我同意楼主的。要判。我们就那么用的。
we_sky2008 2010-03-23
  • 打赏
  • 举报
回复
编译器会保证不会delete NULL指针
编译器在处理delete操作符时已经加上判断
if (p != NULL)
delete p;
unicode 2010-03-23
  • 打赏
  • 举报
回复
这个要看它的构造函数里有没有创建m_pData吧
昵称很不好取 2010-03-23
  • 打赏
  • 举报
回复
可以delete 一个NULL指针,所以不需要加判断了
sybtjp 2010-03-23
  • 打赏
  • 举报
回复
在重载赋值操作符的时候,为什么有写书没有判断指针成员变量是否为空就直接delete?
r如:

class string{
public:

string(const string & str);
string(const char *pchar);
string &operator(const string & str);
private:
char *m_pData;
int m_size;
};

string &string::operator(const string & str)
{
if(*str == this)
return;
delete []m_pData; // 就这里.不是应该先判断吗?判断m_pdata是否为空吧,为空就没必要在删除了吧,请大家看看。

......

}
herman~~ 2010-03-23
  • 打赏
  • 举报
回复
可以自己加上判断了,养成好习惯

64,282

社区成员

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

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