Estoy empezando con RAII en C++ y establecí un pequeño caso de prueba. O mi código está muy confundido, ¡o RAII no funciona! (Supongo que es el primero).C++ RAII no funciona?
Si me quedo:
#include <exception>
#include <iostream>
class A {
public:
A(int i) { i_ = i; std::cout << "A " << i_ << " constructed" << std::endl; }
~A() { std::cout << "A " << i_ << " destructed" << std::endl; }
private:
int i_;
};
int main(void) {
A a1(1);
A a2(2);
throw std::exception();
return 0;
}
con la excepción comentada me sale:
A 1 constructed
A 2 constructed
A 2 destructed
A 1 destructed
como se esperaba, pero con la excepción consigo:
A 1 constructed
A 2 constructed
terminate called after throwing an instance of 'std::exception'
what(): std::exception
Aborted
así que mis objetos no son destruidos a pesar de que están fuera del alcance. ¿No es esta la base completa de RAII?
Punteros y correcciones, ¡muy apreciadas!
¡Usted también encontró un error en C++! =) – Eric
interesante borde caso! –
Has roto RAII :( – rpg