আমি এখানে অনেক পোস্ট পোস্ট পোস্ট দেখেছি যা কাজটি পেতে ভাগ্যবান মামলায় পড়ে যাবে তবে এর মধ্যে কোনওটিই ক্রাশে 100% নিরস্তক নয়। কিছু একটি হার্ডওয়্যার এবং ওএসে ক্র্যাশ করবে, অন্যরা তা করবে না। তবে এটিকে ক্র্যাশ করার জন্য অফিসিয়াল সি ++ স্ট্যান্ডার্ড অনুযায়ী মানক উপায় রয়েছে।
থেকে বরাত দিয়ে সি ++ স্ট্যান্ডার্ড আইএসও / আইইসি 14882 §15.1-7 :
যদি ব্যতিক্রম হ্যান্ডলিং মেকানিজম ব্যতিক্রম অবজেক্টের সূচনা সম্পন্ন করার পরে তবে ব্যতিক্রমটির জন্য হ্যান্ডলারের সক্রিয়করণের আগে, একটি ফাংশন কল করে যা একটি ব্যতিক্রমের মাধ্যমে প্রস্থান হয়, স্ট্যান্ড :: টার্মিনেট বলা হয় (15.5.1))
struct C {
C() { }
C(const C&) {
if (std::uncaught_exceptions()) {
throw 0; // throw during copy to handler’s exception-declaration object (15.3)
}
}
};
int main() {
try {
throw C(); // calls std::terminate() if construction of the handler’s
// exception-declaration object is not elided (12.8)
} catch(C) { }
}
আমি এটি প্রদর্শনের জন্য একটি ছোট কোড লিখেছি এবং এখানে আইডিয়নে খুঁজে পেতে এবং চেষ্টা করার চেষ্টা করা যেতে পারে ।
class MyClass{
public:
~MyClass() throw(int) { throw 0;}
};
int main() {
try {
MyClass myobj; // its destructor will cause an exception
// This is another exception along with exception due to destructor of myobj and will cause app to terminate
throw 1; // It could be some function call which can result in exception.
}
catch(...)
{
std::cout<<"Exception catched"<<endl;
}
return 0;
}
আইএসও / আইইসি 14882 §15.1 / 9 উল্লেখ ছাড়াই নিক্ষেপ উল্লেখ করেছে ফলস্বরূপ কল বাতিল হওয়াতে ফলস্বরূপ:
বর্তমানে যদি কোনও ব্যতিক্রম হ্যান্ডেল না করা হয় তবে কোনও অপারেন্ড কল ছাড়াই একটি থ্রো-এক্সপ্রেশন এক্সিকিউট করা হবে std :: সমাপ্ত ()
অন্যগুলির মধ্যে রয়েছে: ডিস্ট্রাক্টর থেকে নিক্ষেপ: আইএসও / আইইসি 14882 §15.2 / 3
asm { cli; };