0

我在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() 方法,因为我想要名称要一致)。我希望有一个与这个问题的第一个答案类似的解决方案,即使用 cstdlib 的基类来访问free()

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

4

1 回答 1

2

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

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

于 2013-02-22T00:59:36.627 回答