2016-06-29 12 views
6

In einigen Fällen wollte ich eine Art zeitgesteuerter Smart Pointer haben, um zum Beispiel ein sperriges Objekt zwischenzuspeichern, aber nach einer bestimmten Zeit automatisch wieder freizugeben, wenn es nicht benutzt wird. Wenn der Zeiger berührt (dereferenziert) wird, wird der Countdown neu gestartet, und Sie können den Countdown auch stoppen, wenn Sie das Objekt für die Dauer einer Berechnung am Leben halten müssen. Etwas wie:Sind Zeitzeiger vorhanden?

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

Gibt es etwas von dieser Art in Boost oder anderen Bibliothek?

+4

Es scheint so zu sein, als ob ein solches High-Level-Konzept (zeitliche Ressourcenzuordnung), das an solch ein niedriges Niveau gebunden ist (intelligente Objektreferenzen), zu sehr spröden und inhärent nicht-deterministischen Programmen führen würde. – MooseBoys

+0

Es sollte nicht schwer sein, dies zu implementieren, oder? – Zereges

+1

@MooseBoys Möglicherweise. Es könnte ein Tier sein, das vorsichtig behandelt werden muss, aber ich möchte eins haben und damit herumspielen. –

Antwort

0

Ich denke, Sie verlieren den Vorteil eines intelligenten Zeigers, indem Sie es zeitlich steuern. Verfügen Sie nur über ein Objekt, das für die Verwaltung dieser Ressourcen zuständig ist, und fordern Sie die Ressource bei Bedarf an. Andernfalls müssen Sie überprüfen, ob die Ressource noch vor der Verwendung des Zeigers geladen ist. Dies ist das genaue Problem von gemeinsam genutzten Zeigern, bei denen ein anderer Code die Ressource/den Speicher ungültig machen könnte, und Sie müssen die Ressource des Zeigers immer überprüfen, bevor Sie sie verwenden.

+0

Ja, es gibt eine Analogie mit weak_ptr. Aber meine Frage ist nicht, mögliche Vorteile/Mängel zu diskutieren, es geht darum, ob diese Art von Objekt irgendwo existiert. –