第一:它是boost :: noncopyable或booster :: noncopyable。我在不同的地方見過。什麼是助推器的用例::不可複製?
爲什麼要讓一個類不可複製?你能給一些樣例用例嗎?
第一:它是boost :: noncopyable或booster :: noncopyable。我在不同的地方見過。什麼是助推器的用例::不可複製?
爲什麼要讓一個類不可複製?你能給一些樣例用例嗎?
每當你有一個指針作爲該類所擁有的成員變量(即負責銷燬)的類時,我發現它很有用。除非你使用shared_ptr<>
或其他引用計數的智能指針,否則無法安全地複製或分配類,因爲在析構函數中,您將需要delete
指針。但是,您不知道是否已經採用該類的副本,因此您將從解除引用已釋放的指針中獲得雙重刪除或訪問衝突。
如果從noncopyable
繼承那麼它有兩個好處:
如
class MyClass : boost::noncopyable
{
...
};
在boost
的情況下,正確的是boost::noncopyable
。
它用於防止名稱告知等對象的複製。複製導致難以處理的情況很有意義。一個例子是類似文件句柄或網絡連接的概念,如documentation中所述。釋放/關閉資源或文件會出現問題。如果你有很多副本,你會如何處理它。你可以使用一些引用計數,但是如果你在一些地方打開手柄,很難正確處理...
我個人覺得它最明確和有用的用法是在實現一個單例模式時,你真的只想擁有一個例子,在這種情況下,你顯然不想被複制。 Singletons確保只有一個類的實例可以創建,用於保存一些全局資源,例如系統配置。