Запуск потока из абстрактного базового класса [дубликат]

75
07 декабря 2021, 15:00
На этот вопрос уже даны ответы здесь:
Вызов виртуального метода в конструкторе (4 ответа)
Закрыт 2 года назад.

Нужно что бы конструктор абстрактного базового класса запускал в отдельном потоке чисто виртуальный метод, определённый дочерним классом. Что-то похожее на

struct A {
    virtual void ex() = 0;
    A() {
        thread(ex); //Должен запуститься метод B::ex()
    }
};
struct B :A {
    void ex() {
        cout << "ex\n";
    }
};

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

struct A {
    virtual void ex() = 0;
    template<typename F, typename T>
    A(F f, T t) {
        thread tr(f, t);
    }
};
struct B :A {
    void ex() {
        cout << "ex\n";
    }
    B() :A(&B::ex, this) {}
};

Вылетает ошибка abort has been called.

Как можно добиться подобного поведения?

Answer 1

Никак. Вызов виртуальных методов дочернего класса в конструкторе базового - UB

READ ALSO
Ошибка линковки проекта c++

Ошибка линковки проекта c++

Писал программу для перевода чисел из DEC в HEX и наоборот разными функциями на Windows с помощью MVS, теперь пришла пора перенести программу на линукс,...

102
Отображает непонятные символы c++

Отображает непонятные символы c++

Пытаюсь сделать поиск участников из существующего файла, но отображает изначально непонятные цифры, в следствии чего как я подозреваю не дает...

77
С++ bass dll кириллица

С++ bass dll кириллица

Делаю свой плеер на C++ OpenGL Bass dll

81
Нестандартная инициализация for [дубликат]

Нестандартная инициализация for [дубликат]

Когда изучал строки и векторы, наткнулся на вывод вектора таким образом

74