2016-06-29 21 views
6

W niektórych przypadkach chciałem mieć pewien inteligentny wskaźnik oparty na czasie, na przykład, aby buforować jakiś nieporęczny obiekt, ale zwolnić go automatycznie po pewnym czasie, jeśli nie jest używany. Kiedy wskaźnik zostanie dotknięty (dereferencja), odliczanie zostanie wznowione, a ty możesz także zatrzymać odliczanie, jeśli chcesz "zablokować" obiekt przy życiu na czas trwania obliczeń. Coś takiego:Czy istnieją wskaźniki czasowe?

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(); 

Czy coś podobnego istnieje w doładowaniu lub innej bibliotece?

+4

Wygląda na to, że posiadanie tak wysokiego poziomu koncepcji (czasowy przydział zasobów) związany z tak niskim poziomem (odniesienia do obiektów inteligentnych) doprowadziłoby do bardzo kruchych i z natury niedeterministycznych programów. – MooseBoys

+0

To nie powinno być trudne do wdrożenia, prawda? – Zereges

+1

@MooseBoys Possibly. To może być zwierzę, z którym należy obchodzić się ostrożnie, ale chciałbym mieć je i bawić się z nim. –

Odpowiedz

0

Myślę, że tracisz przewagę inteligentnego wskaźnika, mierząc czas. Wystarczy, że jakiś obiekt będzie odpowiedzialny za zarządzanie tymi zasobami i zażądać od niego zasobu w razie potrzeby. W przeciwnym razie konieczne będzie sprawdzenie, czy zasób jest nadal załadowany przed użyciem wskaźnika. Jest to dokładny problem współdzielonych wskaźników, gdy inny kod może unieważnić zasób/pamięć, a przed użyciem należy zawsze sprawdzić poprawność zasobu wskaźnika.

+0

Tak, istnieje pewna analogia z weak_ptr. Ale moje pytanie nie dotyczy omawiania możliwych korzyści/niedociągnięć, chodzi o to, czy tego rodzaju obiekt istnieje gdzieś. –

Powiązane problemy