我正在重写Linux项目上的C++全局新/删除操作符。它在我自己的代码中很好地工作,直到我发现系统库中的新/删除符号也被我的代码取代!这是一个非常糟糕的问题,因为它远远超出了我想要的“恶劣程度”。C++自定义全局新/删除覆盖系统库
所以问题是如何防止链接器/编译器从其他(系统)共享库中取代新/删除syms?或者更确切地说,我如何控制共享库从我的库中链接syms? 我希望系统库仍然会使用它们的默认新建/删除实现。尤其是当可执行文件稍后将其他可选的动态库加载到不受我控制的dlopen()中时。
自定义全局新建/删除操作符实现构建到共享库中。
我在互联网上搜索了如何控制动态链接,但没有成功。我首先尝试在测试可执行文件上更改库链接顺序,但这并没有改变任何内容。
您正在使用错误的自定义点。如果您真的想在任何地方进行此项更改,则更换全球运营商很有用。如果您只想在本地化库中自定义分配,则应该使用其他一些机制(例如分配器)来提供自定义点。 –
考虑仅在您的类上重载新的和删除操作符。如果你有大部分对象的基类,就在那里做。这应该覆盖您正在使用的大部分内存。然后,您可以在需要管理STL容器内的对象的情况下创建自定义STL分配器。 –
只有在普通的“root”类中重载新的/删除,在分配原始内存的情况下无法帮助我。重构大量的代码来使用自定义的基础新/删除将是乏味的。我正在寻找LD_PRELOAD分配器在其他C++程序上测试它的可能性。 – JATothrim