Avatar ·

ما هو المؤشر الذكي (smart pointer) ومتى يجب استخدامه؟

مرحبًا بالجميع! لقد بدأت مؤخرًا في تعلم C++ وأواجه باستمرار مشاكل عند العمل مع الذاكرة. خاصةً أن تسريبات الذاكرة والمؤشرات المعلقة (dangling pointers) تخيفني. على سبيل المثال، غالبًا ما أكتب كودًا مثل هذا: ```cpp class MyClass { public: int* data; MyClass() { data = new int(42); } ~MyClass() { delete data; } }; void example() { MyClass* obj = new MyClass(); // ... بعض الكود الذي قد يرمي استثناءً delete obj; } ``` المشكلة هي أنه إذا حدث استثناء بين `new` و `delete`، أو نسيت استدعاء `delete`، فإن الذاكرة تتسرب. وإذا قام شخص بحذف الكائن مبكرًا بينما أواصل استخدامه، يتعطل البرنامج. سمعت أنه في C++11 ظهرت "المؤشرات الذكية" (smart pointers) التي يجب أن تحل هذه المشاكل. لكنني لا أفهم تمامًا كيف تعمل ومتى يجب استخدامها. ما الفرق بين `unique_ptr` و `shared_ptr` و `weak_ptr`؟ هل يجب الآن التخلي عن المؤشرات العادية تمامًا؟ وكيف أستخدمها بشكل صحيح؟