Effective C++ - 条款9 - 不要在构造和析构函数中调用virtual

  1. 在derived对象的base构造期间,对象类型是base,而不是derived。对象只有在derived构造之后才会成为derived
  2. 第1条的解决方法,是将构造、析构中的virtual改为non-virtual。然后把derived的信息传给base构造所调用的non-virtual
  3. (想想之前为什么要在base构造时调用一个virtual,就是因为:原本以为derived构造时,调用base构造 -> 调用一个virtual -> 动态绑定到derived的相应版本,因为想构造derived的一些信息。而事实上,必须注意这个时间点还没有进行derived的构造函数)
  4. 在第2条中,将derived信息传递给base时,可以通过一个static成员函数来完成,因为static成员函数只能访问static成员变量。(注意static成员变量是在类外这些static成员初始化时开始分配内存[http://c.biancheng.net/view/2227.html],而不是类的声明或对象创建时开始存在)
posted @ 2022-10-07 16:00  ijpq  阅读(14)  评论(0编辑  收藏  举报