可以在成员初始化器列表内调用虚拟函数吗?

时间:2019-01-22 07:57:45

标签: c++

有效的c ++项目9

函数createLogString可以是虚拟的吗?

<view
    android:id="@+id/view3"
    style="@style/AppTheme"

    class="android.support.constraint.Placeholder"
    android:layout_width="367dp"
    android:layout_height="63dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="136dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:background="@drawable/bordertext"
    android:visibility="visible"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

1 个答案:

答案 0 :(得分:5)

是的,它可以是虚拟的(而不是静态的)。但是,它在构建过程中仍将是静态绑定的,并且不会动态分配。

使其虚拟化的唯一要点是,如果它也用于该类的其他成员(不是构造函数/析构函数)中,并且派生类可以覆盖它以对那些成员做一些有用的事情。但是,那开始有淡淡的设计气味痕迹。

斯科特的“在构造或破坏过程中从不调用虚拟功能”的建议源于这样的事实,即它很少会完成有用的工作。