मैं सोच रहा था कि विंडोज हैंडल के साथ unique_ptr<T>
का उपयोग करने का कोई तरीका है या नहीं?विंडोज हैंडल के साथ सी ++ मानक स्मार्ट पॉइंटर्स का उपयोग कैसे करें?
मैं std::default_delete
को विशिष्ट handle_trats
के साथ प्रतिस्थापित करने के बारे में सोच रहा था जो CloseHandle
पर कॉल करता है। समस्या यह है कि HANDLE
को void*
unique_ptr<void>
के रूप में परिभाषित किया गया है sizeof(void)
के रूप में संकलित नहीं किया जाएगा।
- संभालती के लिए एक आवरण वर्ग बना सकते हैं और इस तरह से इसका इस्तेमाल करते हैं:
unique_ptr<new CHandle(h)>
अब तक मैं केवल दो संभावनाएं देखते हैं। यह बहुत अधिक
unique_ptr<T>
स्वयं बेकार बनाता है। HANDLE
विशिष्ट स्मार्ट पॉइंटर क्लास का उपयोग करें जोunique_ptr<T>
जैसा दिखता है।
आपको क्या लगता है बेहतर विकल्प है? आप क्या सुझाव देंगे?
प्रश्न COM IUnknown
पॉइंटर्स के लिए बढ़ाया जा सकता है - CComPtr
किसी भी मानक स्मार्ट पॉइंटर्स द्वारा प्रतिस्थापित किया जा सकता है?
मैंने अपने स्वयं के सेट हैंडल-विशिष्ट वर्गों को लिखा है, क्योंकि कुछ हैंडल को 'क्लोजहैंडल()' की आवश्यकता होती है जबकि अन्य को अलग-अलग एपीआई-विशिष्ट फ़ंक्शन की आवश्यकता होती है, कुछ हैंडल INVALID_HANDLE_VALUE पर सेट होते हैं जब असाइन नहीं किए जाते हैं और अन्य इसके बजाय न्यूल पर सेट होते हैं, आदि। मैंने काम के थोक के लिए आधार वर्गों का एक सेट लिखा, और फिर बंद करने और असाइनमेंट मुद्दों को संभालने के लिए कस्टम विशेषता कक्षाओं का उपयोग करें। लाइब्रेरी कक्षाओं को फिर से कार्यान्वित करने के लिए –
-1 बुरी तरह से। वे स्पष्ट रूप से इस कार्यक्षमता के लिए डिज़ाइन किए गए हैं, यह दुरुपयोग नहीं है। आप व्यर्थ नई बग और कोड पेश करेंगे। पॉइंटर्स और हैंडल को पहचानने के लिए – Puppy
+1 विभिन्न अर्थशास्त्र के साथ अलग-अलग चीजें हैं। एक स्मार्ट पॉइंटर प्रकार में शोहोर्न हैंडल्स आपको उन तरीकों का एक समूह देता है जो वास्तव में हैंडल के लिए समझ में नहीं आता है। –