“::运算符新”有什么作用

what does `::operator new` do?

本文关键字:什么 作用 运算符      更新时间:2023-10-16

我正在查看一些重载new/delete的示例代码

我有以下内容

// manage memory for instances
void * roun_class:: operator new(std::size_t s)
{
    void * result(::operator new(s));
    return result;    
}

这是第一次,我正在查看::运算符。我在谷歌/SO中找不到任何关于它的信息。所以,有人可以解释为什么我们有::并且前面没有类。这个有什么特别之处::运算符??,

仅供参考,我已经看过以下内容::operator() 有什么作用?虽然没有真正回答我的问题

前导::通常表示全局命名空间(即没有命名空间),所以我猜有必要::operator new表明我们正在谈论内置的new,而不是递归调用类的new

::operator new(std::size_t)是全局命名空间中的new(std::size_t)运算符(即:默认内存分配函数之一)。

它在这里被称为::operator new,因为如果不是这样,这个operator new只会再次调用自己,这将导致堆栈溢出。

:: 称为范围解析运算符。
希望这个例子对你有所帮助:

int count = 0;
int main(void) {
  int count = 0;
  ::count = 1;  // set global count to 1
  count = 2;    // set local count to 2
  return 0;
}

请参阅C++参考资料:http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc05cplr175.htm

就新的超载而言。这是我给你的。

void* 运算符 new ( 标准::size_t 计数); (1)  void* 运算符 new[]( std::size_t count );(2)   void* 运算符 new ( std::size_t count, const std::nothrow_t& ); (3)   void* 运算符 new[]( std::size_t count, const std::nothrow_t& ); (4)   void* 运算符 new ( std::size_t, void* PTR ); (5) void* 运算符 new[]( std::size_t, void* ptr ); (6)

可以通过两种方式替换/重载分配函数:
在全球范围内:

为了调用它,重载的签名 分配函数必须在分配位置可见, 隐式声明的默认分配函数除外。这 分配函数将用于所有分配 当前程序中的相应参数

在本地范围内:

重载运算符 new 必须是静态公共成员函数 类。此分配函数将仅用于分配 该特定类的。

苏尔斯 : http://en.cppreference.com/w/cpp/memory/new/operator_new

它在"global"命名空间中调用新运算符。 这是内置于C++编译器中的那个。