Avatar ·

لما نحتاج 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(); // استدعاء صريح للمدمر ```