:: operator new(sizeof(A));,它是如何工作的

use*_*832 3 c++

我认为它分配内存sizeof(A)return地址pointer a,我是对的吗?第二个问题是,我不明白::operator为什么它使用符号::和单词operator

A* a = ::operator new(sizeof(A));
Run Code Online (Sandbox Code Playgroud)

Seb*_*ann 7

是的,你是对的,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)