可以说我有以下几点:成员函数何时超出范围?
struct Foo
{
Foo() : bar([&]{ doSomething();})
std::function<void(void)> bar;
void doSomething(){};
}
而且可以说,一个线程调用经常一个Foo实例的杆件,而另一个线程自毁foo的实例。因为Foo的析构函数被首先调用,所以调用bar会导致无效的函数调用吗?在释放之前,Foo的析构函数是否使无效的成员函数调用?
编辑: 对不起,我应该有一个更具体一点,调用doSomething成为未定义之前bar的析构函数被调用?
成员变量存在于对象中。如果没有对象,那么成员变量如何存在? –
这是你的责任,以确保没有线程破坏一个对象,而另一个线程是或可能正在使用它。 –
这就是为什么一个对象无法同步其自身的破坏的主要原因。如果你想实现'销毁请求',也就是说,一个对象可以被请求在同时处理其他请求的同时被破坏,这必须在*外部*,而不是由类本身同步。 – ComicSansMS