我正在重寫Linux項目上的C++全局新/刪除操作符。它在我自己的代碼中很好地工作,直到我發現系統庫中的新/刪除符號也被我的代碼取代!這是一個非常糟糕的問題,因爲它遠遠超出了我想要的「惡劣程度」。C++自定義全局新/刪除覆蓋系統庫
所以問題是如何防止鏈接器/編譯器從其他(系統)共享庫中取代新/刪除syms?或者更確切地說,我如何控制共享庫從我的庫中鏈接syms? 我希望系統庫仍然會使用它們的默認新建/刪除實現。尤其是當可執行文件稍後將其他可選的動態庫加載到不受我控制的dlopen()中時。
自定義全局新建/刪除操作符實現構建到共享庫中。
我在互聯網上搜索瞭如何控制動態鏈接,但沒有成功。我首先嚐試在測試可執行文件上更改庫鏈接順序,但這並沒有改變任何內容。
您正在使用錯誤的自定義點。如果您真的想在任何地方進行此項更改,則更換全球運營商很有用。如果您只想在本地化庫中自定義分配,則應該使用其他一些機制(例如分配器)來提供自定義點。 –
考慮僅在您的類上重載新的和刪除操作符。如果你有大部分對象的基類,就在那裏做。這應該覆蓋您正在使用的大部分內存。然後,您可以在需要管理STL容器內的對象的情況下創建自定義STL分配器。 –
只有在普通的「root」類中重載新的/刪除,在分配原始內存的情況下無法幫助我。重構大量的代碼來使用自定義的基礎新/刪除將是乏味的。我正在尋找LD_PRELOAD分配器在其他C++程序上測試它的可能性。 – JATothrim