Avatar ·

كيفية تنفيذ نمط Singleton في C++ مع مراعاة تعدد الخيوط؟

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