我需要爲共享指針實例編寫我自己的析構函數。不幸的是,這樣的實例是從庫函數調用中獲得的,並不是我初始化它的。那麼我怎麼能在這裏「設置」析構函數呢?如何爲現有的共享指針設置刪除器?
理想的情況下,在我腦海裏的代碼可能看起來像
pointer.setDeleter(myDeleter);
或
pointer = std::make_shared<MyType>(pointerOld.get(), myDeleter);
我沒有找到的第一個假設的API。對於第二個,據說MyType
沒有帶2個參數的構造函數。它不可編譯。
對此有何想法?
謝謝!
爲什麼你想要這個?據推測,圖書館不希望你與他們的刪除者搞砸。 – GManNickG
@GManNickG因爲我正在使用具有事件庫機制的庫。因此,我希望在某個線程(即事件庫的線程)中調用刪除器。否則,刪除者將引入段錯誤。 – zzy
您是否需要在釋放對共享指針的最後一個引用時調用刪除器,或者是否足以創建一個新的共享指針(具有其自己的生存期),該共享指針延長了源共享指針的生命週期,去零,運行額外的代碼? – Yakk