在仍然使用cstdlib free的同时在类中定义自定义free()

时间:2013-02-22 00:34:18

标签: c++ inheritance scope

我正在 cstdlib malloc() free()函数之上创建自定义内存分配器(出于性能原因)。分配器位于一个简单的类中,该类存储一些内存缓冲区和其他参数。我想说出释放内存 free ()的方法,但是我仍然需要在类中使用cstdlib的 free()

#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的free()创建一个包装器来解决这个问题,但我不禁想到必须有一个更好的解决方案(我也不想重命名类的free()方法,因为我希望名字保持一致)。我希望找到this question第一个答案的解决方案,即使用cstdlib的基类来访问 free()

C ++是否提供了将标准C函数作为类结构访问的任何方法?有什么方法可以告诉编译器我想直接在类声明下使用范围(没有它是超类,在这种情况下甚至不存在!)?

1 个答案:

答案 0 :(得分:1)

是的,原始free可在任何上下文中以std::free形式访问。如果您想要偏执,请添加其他限定符并使用::std::free

::free从全局命名空间中获取它,它应该是相同的函数,但首选std::。除非::free而不是#include <stdlib.h>,否则不保证<cstdlib>存在。

相关问题