लिनक्स पर मेरे पास एक स्थिर लाइब्रेरी से कुछ उत्पन्न सी ++ कोड है जो वैश्विक चर को परिभाषित करता है। इस वैश्विक चर का एक उदाहरण दो साझा पुस्तकालयों के बीच साझा किया जाता है जो इसके प्रतीक का संदर्भ लेते हैं।लिनक्स पर, विनाशक C++ में वैश्विक चर के साझा उदाहरण पर दो बार क्यों चलाता है?
जब प्रक्रिया बंद हो जाती है और स्थिर समाप्ति चरण चलाया जाता है, तो मुझे लगता है कि इस साझा उदाहरण पर विनाशक दो बार चलाया जाता है! संभावित रूप से प्रति पुस्तकालय एक बार प्रत्येक अनलोड के रूप में।
यह प्रश्न हाल ही में देखा गया है: related question। यह एक ही व्यवहार की तरह लगता है, लेकिन यह क्यों हो रहा है के बारे में कोई चर्चा नहीं है।
क्या कोई इस व्यवहार के पीछे सैद्धांतिक स्पष्टीकरण जानता है?
यह केवल संकलक उत्पन्न कोड द्वारा प्रति चर एक बार चलाना चाहिए। वैरिएबल का पता प्राप्त करने का प्रयास करें क्योंकि विनाशक यह सत्यापित करने के लिए चलाया जाता है कि यह वही वस्तु है। –
शायद आपने कुछ स्मार्ट पॉइंटर क्लास में ऑब्जेक्ट में पॉइंटर संग्रहीत किया है, जो इसके टर्गर को नष्ट करने का प्रयास करता है। –
तो वैश्विक पुस्तकालयों में से केवल एक (एक संकलन इकाई) में परिभाषित किया गया है? – Thomas