我在C ++代码中遇到了我认为奇怪的问题,并对原因感到好奇。我为类Object重载了新的并将返回的值打印到控制台。我还在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
答案 0 :(得分:2)
new
是一个原始分配器。所请求的地址和内存量的使用是实现定义的。
作为一个例子,调试信息,或关于块大小的信息(要销毁的对象的数量),或者(可能?Tricky,不确定数组如何工作)vtable信息都可以放在&#34; actual之前对象开始&#34;。
只保证在this
之后通过原始位复制普通的可复制对象。
这意味着需要使用placement new
的返回值,而不是重新解释指向原始存储的指针。