Мне хорошо известно, что в деструкторе нельзя исключать какие-либо исключения.
Но, как часть моего понимания этой концепции, я закодировал этот пример: -
#include <iostream>
using namespace std;
class A {
private:
int i;
public:
A()
{
i = 10;
}
~A()
{
throw 30;
}
};
int main(){
try{
A();
throw 10;
}
catch (int i){
cout << i << endl;
cout << "exception caught" << endl;
}
}
В соответствии с моим пониманием, эта программа должна быть прервана вызовом std:: terminate(), поскольку одновременно будут два исключения. Но эта программа дает следующий результат: -
30
exception caught
Может кто-нибудь объяснить мне логику этого, почему это не заканчивается?