¿C ++ RAII no funciona?

Acabo de comenzar con RAII en C ++ y configurar un pequeño caso de prueba. ¡O mi código está profundamente confundido, o RAII no está funcionando! (Supongo que es lo primero).

Si 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;
}

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 obtengo:

A 1 constructed
A 2 constructed
terminate called after throwing an instance of 'std::exception'
  what():  std::exception
Aborted

así que mis objetos no se destruyen a pesar de que están fuera de alcance. ¿No es esta la base completa para RAII?

Punteros y correcciones muy apreciados!

Respuestas a la pregunta(10)

Su respuesta a la pregunta