Avatar ·

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. 是否有任何