لما نحتاج placement new في C++ وكيف نستخدمه بشكل صحيح؟
مرحباً بالجميع! أنا أتعلم C++ ووجدت شيئاً اسمه placement new. في الاستخدام العادي، أستخدم `new` لإنشاء الكائنات في heap و `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(); // استدعاء صريح للمدمر
```