传递到A :: operator new()的大小是否总是等于sizeof(A)?

xml*_*lmx 5 c++ standards memory-management operator-overloading c++11

struct A final
{
    int a;

    void* operator new(size_t size)
    {
        //
        // Is size always equal to sizeof(A) here?
        //
        return ::operator new(size); 
    }

    void operator delete(void* ptr)
    {
        ::operator delete(ptr);
    }
};

int main()
{
    for (auto i = 0; i < 100; i++)
    {
        delete new A;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题也嵌入在代码中.

C++标准是否保证传递给A :: operator new()的大小始终相同?

更新: 在这里,只考虑A只是最后一堂课.

Mat*_*son 4

引用 C++11 标准第 5.3.4 节第 10 点:

new 表达式将请求的空间量作为 std::size_t 类型的第一个参数传递给分配函数。该参数不得小于正在创建的对象的大小;仅当对象是数组时,它才可能大于正在创建的对象的大小。

所以,是的,它保证与对象的大小相同。但请注意,不同的编译器或不同的编译器选项可能会在编译时改变特定对象的实际大小。