`:: operator new`做什么?

时间:2013-11-08 19:34:51

标签: c++ overloading new-operator

我正在查看一些重载new / delete

的示例代码

我有以下

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

这是我第一次看 :: operator 。我在Google / SO中找不到任何关于它的内容。所以,有人可以解释为什么我们有::并且没有前面的课程。这个 :: operator 有什么特别之处? ,

仅供参考,我已经看过以下内容了 what does ::operator() do?

虽然没有真正回答我的问题

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

这里称为::operator new,因为如果不是这样,那么operator new只会再次调用自身,这会导致堆栈溢出。

答案 2 :(得分:3)

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

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* operator new  ( std::size_t count );  //(1)   
void* operator new[]( std::size_t count ); //(2)    
void* operator new  ( std::size_t count, const std::nothrow_t& );  //(3)    
void* operator new[]( std::size_t count, const std::nothrow_t& );  //(4)    
void* operator new  ( std::size_t, void* ptr );  //(5)  
void* operator new[]( std::size_t, void* ptr );  //(6)

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

  

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

本地范围内的

  

重载运算符new必须是静态公共成员函数   班级。此分配功能仅用于分配   那个特殊的班级。

Seource:http://en.cppreference.com/w/cpp/memory/new/operator_new

答案 3 :(得分:1)

它在“global”命名空间中调用new运算符。这是C ++编译器内置的。