namespace QuantLib {
//! Base error class
class Error : public std::exception {
public:
/*! The explicit use of this constructor is not advised.
Use the QL_FAIL macro instead.
*/
Error(const std::string& file,
long line,
const std::string& functionName,
const std::string& message = "");
/*! the automatically generated destructor would
not have the throw specifier.
*/
~Error() throw() {}
//! returns the error message.
const char* what() const throw();
private:
boost::shared_ptr<std::string> message_;
};
}
जैसा कि आप टिप्पणी के माध्यम से देखते हैं, वर्ग Error
का विनाश स्पष्ट रूप से नो-थ्रो विनिर्देशक के साथ एक खाली कार्यान्वयन प्रदान करता है।क्या हमें नो-थ्रो विनिर्देशक के साथ विनाशक प्रदान करना चाहिए?
प्रश्न: क्या यह आवश्यक है? या क्या यह एक अच्छा अभ्यास है जो संकलक को एक निहित विनाशक उत्पन्न करने की तुलना करता है?
मुझे अपने अपवाद वर्ग में कोई नो-थ्रो विनाशक जोड़ना पड़ा जो कि एक चेतावनी या त्रुटि को समाप्त करने के लिए std :: अपवाद से प्राप्त हुआ था, जब मैंने एक प्रदान नहीं किया था। यह पसंद नहीं आया कि व्युत्पन्न वर्ग में बेस क्लास के समान वें-थ्रो स्पेक नहीं था। –
* यदि * आप ऐसा करने का निर्णय लेते हैं, तो यदि संभव हो तो मैं 'throw()' के बजाय 'noexcept' का उपयोग करूंगा। डायनामिक अपवाद विनिर्देश (जिसमें 'फेंक()', कम से कम मैंने इसे पढ़ा है) को बहिष्कृत किया गया है (हालांकि यदि आपका कंपाइलर स्नफ करने के लिए नहीं है, तो आप ऐसा करने में सक्षम नहीं हो सकते हैं)। –