可以說我有以下幾點:成員函數何時超出範圍?
struct Foo
{
Foo() : bar([&]{ doSomething();})
std::function<void(void)> bar;
void doSomething(){};
}
而且可以說,一個線程調用經常一個Foo實例的杆件,而另一個線程自毀foo的實例。因爲Foo的析構函數被首先調用,所以調用bar會導致無效的函數調用嗎?在釋放之前,Foo的析構函數是否使無效的成員函數調用?
編輯: 對不起,我應該有一個更具體一點,調用doSomething成爲未定義之前bar的析構函數被調用?
成員變量存在於對象中。如果沒有對象,那麼成員變量如何存在? –
這是你的責任,以確保沒有線程破壞一個對象,而另一個線程是或可能正在使用它。 –
這就是爲什麼一個對象無法同步其自身的破壞的主要原因。如果你想實現'銷燬請求',也就是說,一個對象可以被請求在同時處理其他請求的同時被破壞,這必須在*外部*,而不是由類本身同步。 – ComicSansMS