码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

时间:2014-08-16 10:59:50      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:cti   amp   size   c++   ef   on   对象   return   

 

1、当在一个子类当中调用构造函数,其父类构造函数肯定先被调用。如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数。即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virtual函数呢?析构函数也相同,派生类先于基类被析构,又如何去找派生类相应的虚函数?

2、做法:将子类的某个函数改为non-virtual,然后在子类构造函数中传递参数给父类函数。然后父类的构造函数就可以安全的调用那个non-virtual了。

记住:

       在构造和析构期间不要调用virtual函数,因为这类调用不会下降到子类这一层。

对于赋值操作符,我们常常要达到这种类似效果,即连续赋值:
  int x, y, z;
  x = y = z = 15;  //赋值的连锁反应

  x = (y = (z = 15));//执行顺序

为了实现上述的连锁赋值,赋值操作符必须返回一个 引用,来指向操作符的左侧实参。

widget & operator = (const widget& rhs) //返回类型为一个引用

{

      return *this;                                             //返回左侧对象

}

 

记住:

      令赋值操作符返回一个reference to *this;

 

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this,布布扣,bubuko.com

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

标签:cti   amp   size   c++   ef   on   对象   return   

原文地址:http://www.cnblogs.com/zhuxuekui/p/3916166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!