我认为它分配内存sizeof(A)和return地址pointer a,我是对的吗?第二个问题是,我不明白::operator为什么它使用符号::和单词operator?
A* a = ::operator new(sizeof(A));
Run Code Online (Sandbox Code Playgroud)
是的,你是对的,operator new()(函数)与new(关键字)不同,它只分配N个字节,不执行对象的初始化.但是,该new关键字用于operator new()分配内存.
与其他(标准)函数不同,operator new()它不是std命名空间的一部分,而是位于全局命名空间中.因此::,前面强制编译器采用全局定义而不是更专业的定义.例如:
namespace foo {
void* operator new (std::size_t size)
{
std::cout << "custom implementation" << std::endl;
// some code...
}
void SomeFunc()
{
operator new(0); // prints "custom implementation"
::operator new(0); // prints nothing at all
}
}
Run Code Online (Sandbox Code Playgroud)