gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:20:07 25 4
gpt4 key购买 nike

我在我的 C++ 代码中遇到了我认为奇怪的地方,并且很好奇原因。我已经为类 Object 重载了 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 是原始分配器。请求的地址和内存量的使用是实现定义的。

例如,调试信息,或关于 block 大小的信息(要销毁的对象数量),或(也许?棘手,不确定数组如何工作)vtable 信息都可以放在“实际对象开始”之前.

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

这意味着需要使用位置 new 的返回值,而不是指向原始存储的重新解释的指针,顺便说一句。

关于c++ - 重载 new 返回的值与 this 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com