所以我有这个基类,它创建了一个在构造时调用虚拟方法的线程。之所以这样设计,是因为我只想让其他开发人员覆盖此方法,而不是同时覆盖构造函数和此方法。因此,当我继承此类时,我认为将要调用的方法是覆盖。它没有用。我的构造函数代码是下一个
IOHandler::IOHandler(int refresh_rate)
{
alarm_is_set = false;
terminate_threads = false;
init_complete = false;
update_cycle_thread = std::thread (& IOHandler::update_cycle,
this,
refresh_rate);
}
但是当我创建一个子类 f.e.
class childClass: public IOHandler
{
void update_cycle(int refresh_rate) override;
}
调用的函数是IOHandler::update_cycle,不是override,是否可以做我想做的事?问候
最佳答案
You should not call a virtual function from the constructor :该对象尚未完全构建,您的重写函数将无法从基础调用。这就是 std::thread
接收函数对象作为参数的原因。替代方法通常是在线程构造后调用 start()
方法。
关于c++ - 覆盖线程函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337374/