设为首页 加入收藏

TOP

effectiveC++(十七)(三)
2010-12-26 23:20:34 来源: 作者: 【 】 浏览:4344
Tags:effectiveC 十七
; "hello\0"
                  /
                 /
rhs    data -----

赋值运算符做的第一件事是用delete删除data,其结果将如下所示:

*this  data ------------>
                   /
                  /
rhs    data -----

现在,当赋值运算符对rhs.data调用strlen时,结果将无法确定。这是因为data被

删除的时候rhs.data也被删除了,data,this->data 和rhs.data 其实都是同一个

指针!从这一点看,情况只会越变越糟糕。

现在可以知道,解决问题的方案是对可能发生的自己给自己赋值的情况先进行检查

,如果有这种情况就立即返回。不幸的是,这种检查说起来容易做起来难,因为你

必须定义两个对象怎么样才算是“相同”的。

你面临的这个问题学术上称为object identity,它在面向对象领域是个很有名的

论题。本书不是讲述object identity的地方,但有必要提到两个解决这个问题的

基本方法。

一个方法是,如果两个对象具有相同的值,就说它们是相同的(具有相同的身份)

。例如,两个string对象如果都表示的是相同顺序的字符序列,它们就是相同的:

string a = "hello";
string b = "world";

首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇effectiveC++(十八) 下一篇effectiveC++(十六)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: