मैं नए प्रकार को परिभाषित करने के लिए पाइथन सी एक्सटेंशन दस्तावेज़ के माध्यम से काम कर रहा हूं और बस Providing finer control over data attributes अनुभाग समाप्त कर चुका हूं।क्या Python C एक्सटेंशन के लिए Py_XDECREF के बजाय Py_DECREF का उपयोग करने का कोई लाभ है?
इस खंड में, वे यह सुनिश्चित करें कि Noddy
struct के first
और last
विशेषताओं NULL
कभी नहीं हो सकता, उदाहरण के लिए new
में रिक्त स्ट्रिंग के लिए गुण आरंभ और getters और setters कि TypeError
अगर बढ़ा जोड़कर उदाहरण कोड बदलने उपयोगकर्ता इन विशेषताओं को नल को हटाने या अन्यथा सेट करने का प्रयास करता है।
इसके अतिरिक्त (और मेरे सवाल का विषय), लेखक इन विशेषताओं के लिए Py_DECREF
करने के लिए Py_XDECREF
के सभी बदल जाता है, कि कहा:
इन परिवर्तनों के साथ, हम आश्वस्त कर सकते हैं कि पहली और आखिरी सदस्य हैं कभी भी नहीं, इसलिए हम लगभग सभी मामलों में नल मूल्यों के लिए चेक हटा सकते हैं। इसका अर्थ यह है कि अधिकांश Py_XDECREF() कॉल को Py_DECREF() कॉल में परिवर्तित किया जा सकता है। एकमात्र जगह जिसे हम इन कॉलों को नहीं बदल सकते हैं, डीलोकेटर में है, जहां संभावना है कि इन सदस्यों की शुरुआत कन्स्ट्रक्टर में विफल रही।
मुझे ऐसा लगता है कि यह सिर्फ Py_XDECREF
उपयोग करने के लिए सुरक्षित हो सकता है, यह देखते हुए कि Py_DECREF
परिणाम एक segmentation fault
में अगर इसकी एक NULL
मूल्य पारित कर दिया।
Py_XDECREF
से अधिक का उपयोग करने का क्या फायदा है?