我std::function指着一个函数.在这个函数内部,我将指针更改为另一个函数.
std::function<void()> fun;
void foo() {
std::cout << "foo\n";
}
void bar() {
std::cout << "bar\n";
fun = foo;
}
int main() {
fun = bar;
fun();
fun();
}
Run Code Online (Sandbox Code Playgroud)
我看不出任何问题,它工作正常(见这里),但我不确定这是否合法.有什么我想念的吗?也许在c ++标准草案中(我快速检查但到目前为止没有看到任何内容).
几天前,我的朋友告诉我他们的项目情况.有人认为,破坏NotVerySafeClass并行线程的对象(如异步)会很好.它是在不久前实施的.现在它们崩溃了,因为在主线程中调用了一些方法,而对象被销毁了.创建了一些解决方法来处理这种情况.
当然,这只是一个不太好的解决方案的例子,但仍然是一个问题:
有没有办法在内部防止这种情况NotVerySafeClass(拒绝运行methods,如果destructor已经调用,并强制destructor等待,直到任何运行method结束(让我们假设只有一个method))?