2016-06-29 16 views
6

In alcuni casi, desideravo avere una sorta di puntatore intelligente temporizzato, ad esempio per memorizzare nella cache alcuni oggetti ingombranti, ma rilasciarli automaticamente dopo un certo periodo di tempo se non utilizzati. Quando il puntatore viene toccato (dereferenziato) il conto alla rovescia viene riavviato, e puoi anche fermare il conto alla rovescia se hai bisogno di "bloccare" l'oggetto vivo per la durata di un calcolo. Qualcosa di simile:Esistono puntatori temporizzati?

timed_ptr<Type,30> p = new Type(); \\object is deleted after 30 seconds, and pointer set to a checkable 'null' state 

... 

p.stop_count_down(); 
// do something with the object, guaranteed it won't expire while we still need it. 
p.start_count_down(); 

fa qualcosa del genere esiste in spinta o di altra libreria?

+4

Sembra che avere un concetto di alto livello (allocazione temporale delle risorse) legato a un livello così basso (riferimenti a oggetti intelligenti) possa portare a programmi molto fragili e intrinsecamente non deterministici. – MooseBoys

+0

Non dovrebbe essere difficile implementarlo, giusto? – Zereges

+1

@MooseBoys Possibly. Potrebbe essere un animale da gestire con cura, ma mi piacerebbe averne uno e giocarci. –

risposta

0

Penso che tu stia perdendo il vantaggio di un puntatore intelligente calcolandolo. Basta avere qualche oggetto responsabile per la gestione di queste risorse e richiedere la risorsa da esso quando necessario. Altrimenti, sarà necessario inserire dei controlli se la risorsa è ancora caricata prima di qualsiasi utilizzo del puntatore. Questo è il problema esatto dei puntatori condivisi in cui un altro codice potrebbe invalidare la risorsa/memoria e devi sempre convalidare la risorsa del puntatore prima di usarla.

+0

Sì, c'è qualche analogia con weak_ptr. Ma la mia domanda non riguarda la discussione di possibili benefici/carenze, si tratta di sapere se questo tipo di oggetto esiste da qualche parte. –