मैं सी ++ में लागू लाइब्रेरी से लिंक करने वाले सी प्रोग्राम में setjmp और longjmp का उपयोग करना चाहता हूं (लेकिन एक सी एपीआई है)।सी ++ पुस्तकालयों से लिंक करते समय सी में setjmp और longjmp का उपयोग
सी ++ कोड गतिशील स्मृति आवंटन करता है और पॉइंटर्स एपीआई के माध्यम से पारित हो जाते हैं, लेकिन जब तक कोड की सी पक्ष सही ढंग से उन (अपारदर्शी) वस्तुओं को प्रबंधित करती है, तो longjmp का उपयोग करते समय कोई गड़बड़ नहीं होनी चाहिए, सही?
मुझे पता है कि इन कार्यों को सी ++ कोड में उपयोग करना सुरक्षित नहीं है, लेकिन क्या यह सी कोड में सुरक्षित होना चाहिए जो सी ++ कोड से जुड़ा हुआ है?
ठीक है। मेरी सोच यह है कि जब तक सी ++ लाइब्रेरी में किए गए आवंटन के पास उचित सी-इंटरफ़ेस कॉल के माध्यम से साफ़ करने का एक तरीका होता है, तो C++ कोड longjmp के प्रभाव से अलग होता है, और अपवाद हैंडलिंग और longjmp प्रत्येक के साथ हस्तक्षेप नहीं कर सकता अन्य। (मैं सी ++ लाइब्रेरी का कार्यान्वयन भी कर रहा हूं।) –
यदि आपके पास सी ++ लाइब्रेरी में अपवाद हैंडलिंग है तो आपको यह सुनिश्चित करना चाहिए कि पुस्तकालय के अंदर किसी भी फेंकने वाले अपवाद पकड़े गए हैं, आप अपवादों को अपने सी ++ कोड से बाहर नहीं करना चाहते हैं (सुनिश्चित नहीं है कि क्या होगा यदि आप ऐसा करते हैं, तो कभी कोशिश नहीं की)। और सी ++ आवंटन जारी करने के लिए, आपको यह पता लगाना होगा कि सी कोड से रिलीज करने की क्या ज़रूरत है जो लांगजंप कॉल के बाद नियंत्रण लेती है। चूंकि आपके पास ऐप और लाइब्रेरी है, इसलिए मुझे यह काम करने के लिए कोई समस्या नहीं दिख रही है। – Miguel