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

    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;

     

  • 相关阅读:
    [灵魂拷问]MySQL面试高频100问(工程师方向)
    前后端分离模式下的权限设计方案
    Netty实战:设计一个IM框架
    超实用,Linux中查看文本的小技巧
    Java面试,如何在短时间内做突击
    挑战10个最难回答的Java面试题(附答案)
    SpringBoot是如何动起来的
    Lab_2_SysOps_VPC_Linux_v2.5
    Lab_1_SysOps_Compute_Linux_v2.5
    change-resource-tags.sh
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3916166.html
Copyright © 2011-2022 走看看