सामान्य गलती के साथ "स्कॉप्ड लॉक" मुहावरे का उदाहरण यहां दिया गया है: कोई स्थानीय चर नहीं बनाया गया है, इसलिए लॉक प्रभावी नहीं है। इस कोड को दोषरहित दोनों संकलित कुलपति ++ 2010 और Comeau सी के साथ ++ ऑनलाइन:अस्थायी उदाहरणों के साथ कॉन्स्ट शुद्धता
error C2512: 'ScopedLock' : no appropriate default constructor available
(जब ScopedLock
सही तरीके से उपयोग, अर्थात्:
ScopedLock के लिए डिफ़ॉल्ट निर्माता बाहर टिप्पणी की है, तो दोनों compilers एक त्रुटि देना स्थानीय चर बनाई गई है: ScopedLock guard(m_mutex);
, तो संकलन के रूप में उम्मीद m_mutex
के रूप में अस्थायी फिक्स समस्या)
की घोषणा में विफल रहता है मैं दो प्रश्न हैं:।।
+०१२३५१६४१०क्यों
X::foo
संकलित करता है? ऐसा लगता है कि कंपाइलरconst Mutex&
कोMutex&
किसी भी तरह से डालने में सक्षम था।क्या भूमिका
ScopedLock
डिफ़ॉल्ट कन्स्ट्रक्टर निभाती है, तो संकलन सफल होता है?
धन्यवाद।
अद्यतन: मुझे जवाब मिला। ऐसा लगता है कि ScopedLock(m_mutex);
कथन ScopedLock
प्रकार के स्थानीय चर m_mutex
बनाता है। अस्थायी नहीं यही कारण है कि ScopedLock::ScopedLock
डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता है।
मानक से उत्तर और प्रासंगिक उद्धरण के लिए धन्यवाद। –