代码之家  ›  专栏  ›  技术社区  ›  sharptooth

如果我已经超载了,怎么称呼原来的“operator new”?

  •  28
  • sharptooth  · 技术社区  · 15 年前

    假设我需要重载全局 ::operator new() for storing extra data with each allocated object . 所以基本上是这样的:

    • 每次呼叫全球 ::运算符new() 它将接受传递的对象大小并添加额外数据的大小
    • 分配内存块
    • 它会将指针偏移到块中没有被额外数据占用的部分,并将该偏移值返回给调用者

    ::operator delete()

    现在的问题是 如何分配内存 malloc() 或者一些特定于平台的功能(通常就是这样做的)。但通常当我需要在C++中分配原始内存时,我调用 . 我能打给原件吗 ::运算符new() ::运算符new()

    1 回复  |  直到 8 年前
        1
  •  20
  •   Potatoswatter    15 年前

    你不能访问它们,因为它不是真的过载,而是替换。当你定义自己的时候 ::operator new ,旧的就不见了。差不多吧。

    实际上,你需要打电话 malloc ●新操作员 . 不仅如此,还要按照18.4.1.1/4中的说明正确处理错误:

    执行循环: 在循环中,函数首先 储藏室。尝试是否涉及 调用标准C库 未指定函数malloc。

    返回指向分配的 否则,如果 set_new_handler()是空指针, 扔坏球。

    函数调用当前新的\u处理程序 (18.4.2.2)。如果调用的函数 返回,循环重复。

    当尝试分配时终止 请求的存储成功或 不返回。