Sono un dilettante C++. Sto scrivendo un codice API Win32 e ci sono maniglie e oggetti stranamente compositi in abbondanza. Quindi mi stavo chiedendo - c'è qualche classe di wrapper che renderebbe più facile la gestione delle risorse?Quale classe wrapper in C++ dovrei usare per la gestione automatizzata delle risorse?
Ad esempio, quando desidero caricare alcuni dati, apro un file con CreateFile()
e ottengo un HANDLE
. Quando avrò finito, dovrei chiamare lo CloseHandle()
su di esso. Ma per ogni funzione di carico ragionevolmente complessa ci saranno dozzine di possibili punti di uscita, per non parlare delle eccezioni.
Quindi sarebbe bello se potessi avvolgere l'handle in una sorta di classe wrapper che chiamerebbe automaticamente CloseHandle()
una volta che l'esecuzione ha lasciato l'oscilloscopio. Ancora meglio - potrebbe fare un conteggio dei riferimenti in modo che io possa passarlo dentro e fuori da altre funzioni, e rilascerebbe la risorsa solo quando l'ultimo riferimento ha lasciato l'ambito.
Il concetto è semplice, ma c'è qualcosa di simile nella libreria standard? Sto usando Visual Studio 2008, a proposito, e non voglio allegare un framework di terze parti come Boost o qualcosa del genere.
L'idea migliore, IMHO. Queste classi sono chiamate handle guards ... – SadSido
Il codice non funziona poiché è possibile copiare la struttura. Http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – Kerido
@Kerido, forse, forse no. Dipende dalla semantica della risorsa che si sta avvolgendo. è giusto dare a Jalf il beneficio del dubbio e assumere che il codice postato sia solo un semplice esempio illustrativo. –