2010-08-19 28 views

回答

3

每當你有一個指針作爲該類所擁有的成員變量(即負責銷燬)的類時,我發現它很有用。除非你使用shared_ptr<>或其他引用計數的智能指針,否則無法安全地複製或分配類,因爲在析構函數中,您將需要delete指針。但是,您不知道是否已經採用該類的副本,因此您將從解除引用已釋放的指針中獲得雙重刪除或訪問衝突。

如果從noncopyable繼承那麼它有兩個好處:

  • 它可以防止類被複制或分配
  • 這使得意圖明顯從看類的定義,即自記錄代碼

class MyClass : boost::noncopyable 
{ 
    ... 
}; 
3

boost的情況下,正確的是boost::noncopyable

它用於防止名稱告知等對象的複製。複製導致難以處理的情況很有意義。一個例子是類似文件句柄或網絡連接的概念,如documentation中所述。釋放/關閉資源或文件會出現問題。如果你有很多副本,你會如何處理它。你可以使用一些引用計數,但是如果你在一些地方打開手柄,很難正確處理...

我個人覺得它最明確和有用的用法是在實現一個單例模式時,你真的只想擁有一個例子,在這種情況下,你顯然不想被複制。 Singletons確保只有一個類的實例可以創建,用於保存一些全局資源,例如系統配置。

相關問題