Considere el siguiente código:Destructor no llama cuando se produce una excepción
#include <iostream>
using namespace std;
class Test {
static int count;
int id;
public:
Test() {
count++;
id = count;
cout << "Constructing object number " << id << endl;
if(id == 4)
throw 4;
}
~Test() { cout << "Destructing object number " << id << endl; }
};
int Test::count = 0;
int main() {
try {
Test array[5];
} catch(int i) {
cout << "Caught " << i << endl;
}
}
El código anterior produce la siguiente salida:
Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 3
Destructing object number 2
Destructing object number 1
Caught 4
pensé destructores siempre fueron llamados cuando los objetos se hacen fuera de alcance , incluso cuando se lanzan excepciones. ¿Por qué no se llama a uno de los destructores de las instancias Test
en este caso?
He editado su pregunta en algo más adecuado para Stack Overflow. Por favor, siga [las pautas de la pregunta] (http://stackoverflow.com/questions/how-to-ask) para referencia futura o su pregunta puede ser downvoted/closed. –