使用std :: adressof存储指针地址

Mic*_* IV 0 c++ pointers c++11

我可能在这里遗漏了一些东西.我需要存储新分配的内存块的指针地址.

我这样做:

    void* buffer = _aligned_malloc(4096,4);
    assert(buffer);
    //save its original address:
    void* initialAddress = (void*) std::addressof(buffer );
Run Code Online (Sandbox Code Playgroud)

initialAddress保存的地址与缓冲区的地址不同.

只有当我分配缓冲区指针时,我才能获得相同的地址(这当然是正确的事情):

    initialAddress = buffer;
Run Code Online (Sandbox Code Playgroud)

那么,为什么std :: addressof(缓冲区)显示不同的地址?我正在使用VS2012进行调试.可能是指针的地址而不是缓冲区的地址?

Jos*_*eld 5

也许那是指针的地址而不是缓冲区的地址?

就是这样.做std::addressof(buffer)与做的相同&buffer(但它们有时可能意味着不同的东西),所以你只是得到buffer指针的地址,这是一个void**.如果您只想要一份副本buffer,请执行initialAddress = buffer;.

  • @MichaelIV因为`operator&`可能因特定类型而过载.`std :: addressof`避免了这个重载. (3认同)