我有一個內部使用工作線程的類。目前,ctor啓動線程,dtor停止(並等待)它。這被認爲是很好的代碼?我認爲爲此目的單獨使用start()
/stop()
函數會更好。ctor/dtor啓動/停止線程或更好地使用start()/ stop()?
其中一個問題是停止並等待線程可能會拋出異常,這在dtor中是不好的。
什麼,你會建議我:
- 離開的代碼,因爲它是和正好趕上,並在析構函數
- 使用
start()
/stop()
記錄異常,讓客戶端處理異常,只是刪除線程(並在不潔的關機時發出警告或某事)
我幾乎可以肯定運行構造函數時,你都保證有一個完全建立對象。調用純虛函數的唯一問題。 –
@aiwarrior:如果基類構造函數啓動一個線程,並且派生類構造函數執行某個動作X,則在新線程中運行的代碼可以在動作X發生之前看到該對象。因此,該對象不是完全構建的。 –
我同意這一點值得一提。仔細閱讀你的確意味着這只是潛力。我很挑剔,因爲只有當繼承是可以期待的時候,它纔是危險的,當然,如果語言允許的話,那麼它是可以預期的。很好的解釋。 –