2013-02-22 28 views
0

我创建的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函数作为类结构?有什么方法可以告诉编译器我想直接在类声明下使用范围(没有它是它的超类,在这种情况下甚至不存在!)?

+0

我认为预先用'::'指定“来自全局命名空间”,但我可能是错的,所以':: free'会这样做。我认为。 – slugonamission 2013-02-22 00:38:01

+0

@slugonamission这正是我正在寻找的!更好,然后我的包装。谢谢! – 2013-02-22 00:47:38

+0

大多数内存分配器都非常好。您的自定义分配器可能比cstdlib版本慢。始终在优化前后进行测量。 – 2013-02-22 00:54:49

回答

1

是的,原始free在任何情况下都可以作为std::free访问。如果您想成为偏执狂,请添加另一个限定符并使用::std::free

::free从全局命名空间中取得它,它应该是相同的功能,但首选std::::free不保证存在,除非您的#include <stdlib.h>而不是<cstdlib>

相关问题