我知道這聽起來很荒謬,weak_ptrs
與unique_ptrs
,但請忍受我。是否將weak_ptr與unique_ptr配對是一個好主意?
我有一組小部件和動畫對它們起作用。小部件有一個明確的所有者,他們創建並銷燬它們。所有的小部件都是在一個線程中創建,銷燬和動畫的,所以在動畫代碼運行時不能銷燬一個小部件。正如你所看到的,這些小部件是以某種方式與動畫共享的,但是如果小部件被刪除,動畫應該停止。
當前的方法是使用std::unique_ptr
作爲窗口小部件的所有者,並將它們暴露爲動畫的原始指針。這使得查找/調試懸掛指針非常困難。一個提議是在所有者類中更改爲std::shared_ptr
,並將std::weak_ptrs
顯示爲動畫,但這會在系統中添加一些不需要/不需要的開銷。
是否有可能(一個好主意?)在std::unique_ptr
的頂部創建某種weak_ptr,只標記指針已被刪除?如果是的話,你可以給我建議一些實現,對於單線程使用來說花費最小。
編輯:
一個更澄清 - 該部件在一個線程中使用,但應用程序有多個線程。同時還有許多動畫並行運行,每個動畫更新60次/秒。來自std::shared_ptr/std::weak_ptr
的開銷來自std::shared_ptr
內部使用的(原子)計數器,在這種情況下實際並不需要。
編輯:
我不是問我是否可以使用std::weak_ptr
與std::unique_ptr
,我知道這是不可能的。我問,如果它是一個好主意/可以建立類似的行爲作爲東西是std::weak_ptr
可以std::unique_ptr
我想你可以使用一個唯一的指針與一個定製的刪除器,可以跟蹤不太弱的指針。儘管如此,我看不出如何比'shared_ptr'少開銷。我只是使用'shared_ptr',因爲那正是你想要的。 –
但相反,您是通過制定自己獨特的弱ptr解決方案來增加開銷,這是否好? –
'開銷來自(原子)計數器,在這種情況下實際上並不需要。'是的,你需要一些(原子)值來查看指針是否有效,原子布爾(標誌)與原子計數器沒有多大區別。 – KillianDS