我正在查看一些重载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?
虽然没有真正回答我的问题答案 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;
}
就新的超载而言。这就是我给你的。
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 ++编译器内置的。