मैंने सुना है कि सी ++ लाइब्रेरी में/से अपवाद फेंकना संभावित रूप से खतरनाक हो सकता है, खासकर डीएलएल के साथ, और विशेष रूप से अगर कॉलिंग कोड और लाइब्रेरी को विभिन्न कंपाइलरों के साथ संकलित किया जाता है। क्या इसमें कुछ भी सत्य है? क्या यह तब तक सुरक्षित है जब तक मैं स्थिर पुस्तकालयों से चिपक जाता हूं? ध्यान दें कि मैं केवल लाइब्रेरी में अपवादों के आंतरिक उपयोग के बारे में बात नहीं कर रहा हूं, मैं उन्हें कॉलिंग कोड में भी गहराई से फेंकना चाहता हूं :)स्थिर रूप से जुड़े सी ++ पुस्तकालयों से अपवाद फेंकने के लिए असुरक्षित?
बस स्पष्ट करने के लिए: कहें कि मुझे एक संकलित स्थिर लाइब्रेरी मिली है जो क्लास फू को परिभाषित करती है इस:
class Foo
{
public:
// Constructor
Foo()
{
/* ... Do stuff ... */
if (stuffwentwrong)
throw(123); // We throw an integer error code (to make it simple)
}
};
और कुछ पुरुष इस तरह इसे इस्तेमाल करता है:
try
{
Foo foo_object;
}
catch (int i)
{
std::cout << "Oh bum. Code: " << i;
}
कि सुरक्षित होगा?
वहाँ समस्याओं (लगभग 15 वर्ष पूर्व) इन सुलझाई जा सकती (जब तक आप गतिशील रूप से लोड हो रहा है/सब अपने आप से DLL उतारने की तरह अजीब बातें कर रहे हैं) थे। यदि आप सीधे डीएलएल का उपयोग कर रहे हैं तो आपको ठीक होना चाहिए। –