重载 new 返回的值与 this 不匹配

Value returned from overloading new and this do not match

我在我的 C++ 代码中遇到了我认为奇怪的地方,并且很好奇原因。我为 class 对象重载了 new 并将返回值打印到控制台。我还在 Object 的构造函数中打印了 this 的值。这些值不匹配(它们相差一个字)。这是预期的吗?

    void* Object::operator new(size_t size)
    {
        void* startAddress = ...
        std::cout << "object starts at absolute address " << (int)startAddress << "\n";
        return startAddress;
    }

    Object(TypeId type)
    {
        _type = type;
        std::cout << "this is address " << (int)this << "\n";

    }

输出:

object starts at absolute address 5164888
this is address 5164896

new 是原始分配器。请求的地址和内存量的使用是实现定义的。

举个例子,调试信息,或者关于块大小的信息(要销毁的对象的数量),或者(也许?棘手,不确定数组如何工作)vtable 信息都可以放在 "actual object starts".

this.

之后,只有普通的可复制对象才能保证通过原始位进行复制

这意味着需要使用放置 new 的 return 值,而不是重新解释的指向原始存储的指针。