【发布时间】:2021-08-31 19:15:22
【问题描述】:
带有单个参数的placement-new 表达式将在该内存中构造一个T 类型的对象。
为什么它调用标准的placement-new 运算符void* operator new ( std::size_t count, void* ptr );,因为后者什么都不做,只返回它的指针参数?
int x = 10;
int* p = new(&x) int{1024};
-
您能解释一下编译器在上面采取的步骤,在
x的内存地址中构造一个新的int吗? -
为什么
placement-new表达式不直接在它作为指针获得的内存地址处构造一个对象,而不是调用一个什么都不做只返回其指针参数的操作符函数?
【问题讨论】:
-
newoperators 可以在用户代码中重载/替换。这就是new表达式 调用new运算符 的原因。默认的placement-newoperator 只返回它给出的指针。用户定义的placement-newoperator 可以做任何它想做的事情(记录等),只要它仍然返回相同的指针。
标签: c++ placement-new