2011-03-28 61 views
0

鑑於這一情況:_beginthread在父類的構造

class A {}; 
class B : A; 

B b; 

如果class A默認的構造函數使用_beginthread一個線程,有可能是該線程開始之前class B構造完成例執行?

回答

4

該線程肯定會被創建,因爲A的構造函數在B的構造函數開始執行之前完全執行。但是,該線程可能啓動,也可能不啓動:這取決於線程的安排方式以及創建線程後在構造函數中執行的操作。當然可能已經開始。

+0

在那之後,如果線程'可以'在A()期間啓動,我假設B中的虛擬函數必須在A()被調用之前註冊? – Nicholas 2011-03-28 04:49:15

+0

@Nicholas:在'A()'期間,對象的動態類型是'A',而不是'B'。您將無法在新線程的構造函數中調用「_beginthread」對象上的任何虛函數。 – Puppy 2011-03-28 04:59:34

+0

@尼古拉斯:基本上,@DeadMG說。如果你有一個在'A'中聲明的虛擬函數,那麼'A'中的那個函數將被調用,而不是'B'中的重載。 – 2011-03-28 05:02:07