2012-04-10 15 views
5

Il senso che ho di questo idioma è che è utile perché garantisce che le risorse vengano rilasciate dopo che l'oggetto che li usa va fuori dal campo di applicazione.Perché RAII è così chiamato?

In altre parole, è più su de-acquisizione e de-inizializzazione, quindi perché è questo idioma nominato il modo in cui è?

risposta

6

In primo luogo, devo notare che è ampiamente considerato un idioma poco conosciuto. Molte persone preferiscono SBRM, acronimo di Stack Bound Resource Management. Sebbene io (a malincuore) segua l'uso di "RAII" semplicemente perché è ampiamente noto e usato, penso che SBRM dia una descrizione molto migliore del vero intento.

In secondo luogo, quando RAII era nuovo, si applicava tanto all'acquisizione quanto al rilascio di risorse. In particolare, al momento era abbastanza comune vedere l'inizializzazione avvenire in due passaggi. Dovresti prima definire un oggetto e solo successivamente allocare dinamicamente le risorse associate a quell'oggetto. Molte guide di stile lo sostenevano, in gran parte perché in quel momento (prima che C++ avesse una gestione delle eccezioni) non c'era un buon modo per gestire l'errore in un costruttore. Pertanto, le guide di stile spesso dicevano che i costruttori dovevano fare solo il minimo indispensabile di lavoro, e in particolare evitare tutto ciò che era aperto al fallimento, specialmente allocando risorse (e alcune ancora dicono cose del genere).

Un bel po 'di quelli già trattati rilasciando le risorse nel distruttore, però, in modo che non sarebbe stato così chiara distinzione dalla prassi precedente.