Вызов виртуальной функции из конструктора

я читаюЭффективный C ++, и есть «Пункт 9: Никогда не вызывайте виртуальные функции во время строительства или разрушения». И мне интересно, если мой код в порядке, даже если он нарушает это правило:

using namespace std;

class A{
    public:
        A(bool doLog){
            if(doLog)
               log();
        }

        virtual void log(){
            cout << "logging A\n";
        }
};


class B: public A{
public:
    B(bool doLog) : A(false){
        if(doLog)
            log();
    }

    virtual void log(){
        cout << "logging B\n";
    }
};


int main() {
    A a(true);
    B b(true);
}

Что-то не так с этим подходом? Могу ли я попасть в беду, когда сделаю что-нибудь более сложное?

Мне кажется, что большинство ответов не получили того, что я там сделал, и они просто снова объяснили, почему вызов виртуальной функции из конструктора потенциально опасен.

Я хотел бы подчеркнуть, что вывод моей программы выглядит следующим образом:

logging A
logging B

Таким образом, я получаю A, когда он создается, и B регистрируется, когда он создается. И это то, что яхотеть! Но я спрашиваю, не нашли ли вы что-то не так (потенциально опасное) с моим "хаком", чтобы преодолеть проблему с вызовом виртуальной функции в конструкторе.

Ответы на вопрос(3)

Ваш ответ на вопрос