Avatar ·

كيفية تنفيذ نمط Singleton بشكل صحيح في C++ (الأساليب الحديثة)

مرحبًا أيها الزملاء! لقد بدأت مؤخرًا في دراسة أنماط التصميم ووجدت نمط Singleton. أفهم الفكرة: ضمان وجود مثيل واحد فقط للفئة، وتوفير نقطة وصول عالمية إليه. لكن في C++ أرى العديد من التطبيقات المختلفة، ولا أستطيع فهم أي منها صحيح وآمن للخيوط. على سبيل المثال، كتبت هذا الإصدار البسيط: ```cpp class Singleton { public: static Singleton* getInstance() { if (!instance) { instance = new Singleton(); } return instance; } void doSomething() { /* ... */ } private: Singleton() {} static Singleton* instance; }; Singleton* Singleton::instance = nullptr; ``` لكن هناك عدة نقاط تزعجني: 1. هذا ليس آمنًا للخيوط: إذا استدعت خيطان `getInstance()` في نفس الوقت، فقد يتم إنشاء كائنين. 2. هل أحتاج إلى حذف الكائن بشكل صريح؟ إذا كان الأمر كذلك، فكيف؟ في destructor؟ لكن من سيتصل بـ destructor؟ 3. أرى على الإنترنت إصدارات مع `std::call_once`