1. 在堆中創建,傳入參數指針至線程中,由線程內部釋放或等待線程退出後再釋放;
2. 不在堆中創建或使用全局變量;
雖然在各種書上提及這種方式的種種不足,但我一直用得還挺好.主要就是注意資源的釋放就成,畢竟這種低層的API能給程序員最大的靈活性,所謂有空間才能發揮嘛.但不可否認的是,站得更高是會看得更遠.一些設計確實能讓代碼變得更加簡潔,並且不用關注太多低層的細節.其實我一直覺得細節很重要,但要會取捨.
看看以下幾個類如何能讓代碼更優雅:
boost::shared_ptr
boost::bind
boost::thread
作爲比較,以下是linux下標準的創建線程的例子:
|
如果用上shared_ptr,就不再需要在線程中來刪除資源了.因爲當引用計數爲0時,shared_ptr會自動的銷燬掉內含的指針.
|
上面的類型轉換有點噁心,不過好在shared_ptr也是允許內部指針的類型繼承的,好繞口.
還是看以下代碼吧,B類由A類派生而來.所以boost::shared_ptr這個類型,可以傳遞boost::shared_ptr對象,並且由於shared_ptr重載了"->"符號,所以直接就可以訪問B的成員了.
|