क्या यह निम्नलिखित के संबंध में linux/gcc पर C++ में longjmp और setjmp का उपयोग सुरक्षित है?सी ++: longjmp और setjmp का उपयोग करने के लिए सुरक्षित?
- अपवाद हैंडलिंग
*this
सूचक- सिग्नल (आई/setjmp longjmp का उपयोग कर अपवाद संचालन को लागू नहीं कर रहा हूँ। मुझे पता है कि क्या दुष्प्रभाव longjmp/setjmp मानक अपवाद संचालन पर होगा चाहते हैं)
- स्मार्ट पॉइंटर्स (बूस्ट के साझा और घुसपैठ पॉइंटर्स)
- और कुछ भी जो आप सोच सकते हैं।
क्या आप स्पष्ट स्मृति विलोपन और विनाशकों के साथ कितनी देर तक गड़बड़ कर सकते हैं? – jameszhao00
आम तौर पर, जब भी सी ++ (वापसी, फेंक, या जो कुछ भी) में किसी दायरे से बाहर निकलने का कोई तरीका होता है, तो संकलक उस ब्लॉक को छोड़ने के परिणामस्वरूप किसी भी स्वचालित चर के लिए dtors को कॉल करने के लिए निर्देश रखेगा। 'longjmp()' कोड में एक नए स्थान पर कूदता है, इसलिए यह डॉटर्स को कॉल करने का कोई मौका नहीं देगा। मानक वास्तव में उससे कम विशिष्ट है - मानक यह नहीं कहता कि dtors को नहीं कहा जाएगा - यह कहता है कि सभी दांव बंद हैं। आप इस मामले में किसी विशेष व्यवहार पर निर्भर नहीं हो सकते हैं। –
मैं स्मार्ट पॉइंटर्स से बहुत परिचित नहीं हूं। अगर मेरे पास स्टैक पर एक स्मार्ट पॉइंटर है, तो जब मैं एक लांगजंप करता हूं तो इसका मतलब यह है कि स्मार्ट पॉइंटर एक रिफॉउंट नहीं हटाएगा? साथ ही, क्या मैं सुरक्षित हूं यदि मैं अपवाद अक्षम करता हूं और कोड लिखता हूं जो longjmp के साथ पागल नहीं होता है? – jameszhao00