Copy Construct && Copy assignment(Operator =)

来源:互联网 发布:尼布楚条约知乎 编辑:程序博客网 时间:2024/05/16 17:47

1 让 Copy assginment 返回一个  & *this

       为了实现连锁等式

 

2 让Copy assginment 处理自我复制,这里有两个问题,第一个问题是自我赋值安全性,第二个问题是自我赋值安全性

  <1> 当拷贝时出现深拷贝时,自我赋值就变的十分危险.可以利用 identity test 来解决这种问题,

但是这种做法不具有异常安全性.当 new 失败时,this对象已经被损坏了.

 

   <2>为了达到异常安全性,经常需要使用建立一个临时对象,用来保存原有对象或者保存新建对象.如

这样做牺牲了一些效率,但是同时带来了异常安全与自我赋值安全.

 

3 在Copy assignment与copy构造函数中别忘记拷贝任何一个成员

      <1> 复制所有成员变量,每当加入一个成员,别忘记copy assignment 与 copy构造函数.漏掉可能会花上数倍的时间调试.

 

      <2> 调用所有base class中的copy函数,对于copy construct以及copy assignmet,编译器可不会替你做好事.你只能指望自己了.这个是继承所带来的复杂度提升.也可以做为拒绝深层次继承的理由之一.