【发布时间】:2021-08-29 22:37:47
【问题描述】:
我有一些关于安置new的问题:
int x;
int* p = new(&x) int{10};
std::cout << x; // 10
-
当我们说放置
new时,我们指的是new表达式还是运算符new(函数)?void* operator new(std::size_t, void*. int); // is this a placement new?
我很困惑!有时我会找到“新操作员”,有时我会找到“新操作员”?!
有时我会发现称为placement new 的运算符new 函数的重载:
void* operator new(std::size_t, void*, int) // placement new?
这是另一个例子:
void* operator new(std::size_t, std::size_t){
std::cout << "operator new(std::size_t, std::size_t)\n";
return nullptr;
}
int* p = new(5u)int;
- 即使第一个参数不是指针,这也是新的展示位置吗?
【问题讨论】:
-
Placement-new 顾名思义:在指定位置“放置”一个“新”构造对象。如果您认为这令人困惑,那么在更复杂的场景中手动控制 destruction 很可能会触发 tick。
-
“Placement new”用于描述
new表达式和适当的operator new重载。
标签: c++ placement-new