shared ptr跨模組邊界的問題

2021-04-02 05:49:49 字數 596 閱讀 3511

如果shared_ptr預設是用delete來釋放物件的,而delete動作產生的是本模組的**,這在windows平台的dll中遇到了問題:可執行程式和dll分屬不同模組,分別使用各自的記憶體管理元件。直接delete,無異於把a堆管理器分配的指標讓b堆管理其去釋放,崩潰還算好的,悄悄的出錯,死都不知道怎麼死的。

還好,boost::shared_ptr使用了乙個叫get_deleter的東西,內部維護了delete的方法。可是,如果我想自定義乙個特別的析構方法怎麼辦?嗯,特化sp_counted_impl_p<>吧!

特化sp_counted_impl_p可以解決大部分問題。可是,引用計數的問題,則是無法解決的:你不可能重寫sp_counted_base。如果我想用shared_ptr指向乙個com物件,那麼,sp_counted_impl_p<>可以讓它工作,但是,com物件內的引用計數將不可能正確。

由此,不由的懷念起loki的**artptr來了,強大的基於策略程式設計的實現!只要將儲存策略中的destory替換成我想要的實現即可實現定製銷毀。替換掉ownershippolicy就可以。就算loki不能進boost(老實說,我認為mpl比typelist好),**artptr絕對應該比那shared_ptr強多了!

系統邊界條件 和 模組級邊界條件

文章 其實第一條描述的是實際問題。但是,描述的並不準確。我也是突然想到的。邊界條件屬於哪個範圍很重要。實際上,分為系統級邊界條件和模組級邊界條件。一般來說,系統邊界條件小於等於模組級邊界條件,系統基本上可以正常執行。因此,第一條實際上說的是在討論模組級邊界條件時,無限擴充套件,而忽視系統級邊界條件,...

imgproc模組 圓形和矩形邊界

1.目的 1 使用opencv函式 boundingrect 來計算包圍輪廓的矩形框.2 使用opencv函式 minenclosingcircle 來計算完全包圍已有輪廓最小圓.contours i 輸入的二維輪廓,以點集表示 contours poly i 輸出近似的多邊形輪廓,以點集表示 ep...

thinkphp 跨模組呼叫

專案簡介 測試專案名為tp3.0 訪問 localhost tp3.0 安裝環境 windows apache mysql php 模組分組 測試時將模組分為兩組home,admin,根據需求還可以新增更多分組,比如 home,admin,user,article。一 跨模組呼叫例項 簡介 在ind...