C++中的placement new有什么作用以及如何正确使用?
大家好!我正在学习C++,遇到了placement new这个东西。平时我用`new`在堆上创建对象,用`new[]`创建数组。但这里有个奇怪的语法:`new (指针) 类型`。我了解到这允许在已分配的内存中创建对象,而不是分配新内存。但为什么要这样?难道总是用普通的`new`不是更简单吗?
例如,我看到这样的代码:
```cpp
#include // 需要placement new
struct MyStruct {
int x;
MyStruct(int val) : x(val) { std::cout << "Constructor\n"; }
~MyStruct() { std::cout << "Destructor\n"; }
};
int main() {
void* buffer = std::malloc(sizeof(MyStruct));
MyStruct* p = new (buffer) MyStruct(42); // placement new
// ...
p->~MyStruct(); // 显式调用析构函数
std::free(buffer);
return 0;
}
```
我有几个问题:
1. 在哪些实际场景中会用到它?
2. 为什么需要手动调用析构函数?
3. 是否有任何