Ho appena iniziato con RAII in C++ e ho impostato un piccolo test case. O il mio codice è profondamente confuso, o RAII non funziona! (Immagino sia il primo).C++ RAII non funziona?
Se corro:
#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;
}
ad eccezione commentata ottengo:
A 1 constructed
A 2 constructed
A 2 destructed
A 1 destructed
come previsto, ma con l'eccezione ottengo:
A 1 constructed
A 2 constructed
terminate called after throwing an instance of 'std::exception'
what(): std::exception
Aborted
così i miei oggetti non vengono distrutti anche se stanno andando fuori dal campo di applicazione. Non è questa l'intera base per RAII.
Puntatori e correzioni molto apprezzati!
Anche tu hai trovato un bug in C++! =) – Eric
caso limite interessante! –
Hai rotto RAII :( – rpg