我有一個resource_manager
類,在內部維護std::vector<boost::shared_ptr<resource> >
。 resource_manager
是resource
的朋友。我希望resource
只能由resource_manager
創建/刪除,所以我將它的構造函數設置爲私有的(工作正常)。如何從shared_ptr調用私有析構函數?
但是,如果我將析構函數設爲私有的,代碼將不會編譯,因爲析構函數被boost::shared_ptr
調用,它不是resource
的朋友。我想執行「不要刪除客戶端」規則,只從resource_manager
只返回const resource*
,但不知何故,我不滿意這種方法提供的安全性(如果客戶端以某種方式發生在非const的指針? )
除了明顯的不使用shared_ptr
的解決方案之外,您是否有任何解決方法/更好的解決方案來解決我的問題?
的唯一途徑「客戶端跨一個指向非const不知何故發生了」,他們能做到這一點是,如果他們使用const_cast進行投射。從「安全性」的角度來看,原始指針和shared_ptr之間沒有區別,不同之處在於生命週期管理,我不確定在沒有shared_ptr的情況下如何處理。 – ronag
'const resource *'並不意味着你不能刪除它。 – UncleBens
@UncleBens:不?我認爲編譯器不應該允許你在const上調用一個非const函數!我錯了嗎?或者這個規則不適用於析構函數? –