0

我有一个库,通过在它的标题中使用定义来替换freemalloc其他几个函数:

#define free some_custom_free 

不幸的是,当其他库(在这种情况下为提升)使用std::free而不是直接调用时,这会严重中断free

error: 'some_custom_free' is not a member of 'std'

这可以适当且可移植地解决,最好不必接触任何一个库吗?

4

2 回答 2

2

没有。从星期天起,你就被搞砸了一千种方式,因为使用的图书馆#define是由南方古猿编写的。唯一的解决方案是更改所做的库#define free

于 2013-07-19T01:51:56.550 回答
1

你应该使用__malloc_hook,它允许你改变做什么malloc

  • 设置__malloc_hook为实际运行some_custom_malloc

  • 设置__free_hook为运行some_custom_free

  • 删除#define,一切都会好起来的!

另一种选择 - 确保#include该库始终位于#includefor boost/stl/whatever 之后。

于 2013-07-19T02:07:43.287 回答