设为首页 加入收藏

TOP

effectiveC++(十六)(一)
2010-12-26 23:19:42 来源: 作者: 【 】 浏览:4556
Tags:effectiveC 十六

条款16: 在operator=中对所有数据成员赋值

 

条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。

实际编程(www.cppentry.com)中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:

template<class t>          // 名字和指针相关联的类的模板
class namedptr {           // (源自条款12)
public:
  namedptr(const string& initname, t *initptr);
  namedptr& operator=(const namedptr& rhs);

private:
  string name;
  t *ptr;
};

template<class t>
namedptr<t>& namedptr<t>::operator=(const namedptr<t>& rhs)
{
  if (this == &rhs)
    return *this;              // 见条款17

  // assign to all data members
  name = rhs.name;             // 给name赋值

  *ptr = *rhs.ptr;   &n

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

评论

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