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

标签 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 函数?有什么方法可以告诉编译器我想直接在类声明下使用范围(而不是它的父类(super class),在这种情况下它甚至不存在!)?

最佳答案

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

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

关于c++ - 在仍然使用 cstdlib free 的同时在类中定义自定义 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014889/

相关文章:

c++ - 计算 remove_if 中的删除(c++ STL)

javascript - 为什么类名重定义后在类内部还能被引用?

c++ - : when we press and hold,程序只做一次怎么办?

c++ - dynamic_cast 理解

c++ - 访问与派生方法同名的重载基类方法

java - 我做错了什么 - 无法从 Main(自定义类)实例化对象

javascript - JavaScript中变量的范围是什么?

python-3.x - 使用生成的变量,其值在一个函数中分配给另一个函数

c++ - 我可以在 LockFileEx 之后复制文件吗?

C++ 预期主表达式编译错误