我创建的cstdlib的malloc顶部自定义的内存分配器()和免费()功能(性能原因)。分配器位于一个简单的类中,该类可以存储少量内存缓冲区和其他参数。我想说明释放内存的方法free(),但是我仍然需要从类内部使用cstdlib的free()。定义自定义的free()类中,同时仍然使用cstdlib免费
#include <cstdlib>
inline void cstdlib_free(void * M){ free(M); } // Works, but is ugly!
class MyAllocator{
/* ... */
// Does internal class operations; Does NOT use stdlib's free
free(void * _Memory){ /* ... */ }
// Frees buffers to system memory; USES stdlib's free
clear(void){
/* ... */
cstdlib_free(Buff); // THIS is what I want to change
/* ... */
}
};
目前,我解决了这个通过创建cstdlib的免费()的包装,但我不禁觉得必须有一个更好的解决办法(我也不想重命名类的自由()方法,因为我希望名称一致)。我希望找到第一个答案this question的解决方案,即使用cstdlib的基类访问免费()。
C++是否提供任何方法来访问标准C函数作为类结构?有什么方法可以告诉编译器我想直接在类声明下使用范围(没有它是它的超类,在这种情况下甚至不存在!)?
我认为预先用'::'指定“来自全局命名空间”,但我可能是错的,所以':: free'会这样做。我认为。 – slugonamission 2013-02-22 00:38:01
@slugonamission这正是我正在寻找的!更好,然后我的包装。谢谢! – 2013-02-22 00:47:38
大多数内存分配器都非常好。您的自定义分配器可能比cstdlib版本慢。始终在优化前后进行测量。 – 2013-02-22 00:54:49