Wie nennt man eine Klasse die im Konstruktor einen Pointer speichert und ihn im Destruktor freigibt?
-
Bei der Benutzung von C APIs in C++ brauche ich manchmal Hilfsklassen die nur im Konstruktor einen Zeiger speichern und im Destruktor diesen mit einer speziellen Funktion wieder freigeben um den Code exceptionsicher zu halten.
Ein Beispiel:
char* pEnvironmentStrings = GetEnvironmentStrings(); X x(pEnvironmentStrings); // soll dafür sorgen das in jedem Fall FreeEnvironmentStrings aufgerufen wird // etwas mit pEnvironmentStrings machenDie Klasse X soll jetzt so aussehen:
class X { public: X(char* pEnvironmentStrings) : pEnvironmentStrings_(pEnvironmentStrings) { } ~X() { FreeEnvironmentStrings(pEnvironmentStrings_); } private: char* pEnvironmentStrings_; };Mein Problem liegt jetzt nur in der Namensgebung. Wie soll man eine solche Hilfsklasse nennen?
~(Wenn man bei boost::scoped_ptr einen Custom Deleter angeben könnte, würde ich wahrscheinlich den nehmen, aber das wird nur von boost::shared_ptr unterstützt.)~
-
Ich weiß nicht, ob's einen Standard-Namen dafür gibt, aber "Auto-Pointer" trifft das Verhalten recht gut.
(btw solltest du dein Design noch etwas verbessern, indem du auch die Speicheranforderung im Konstruktor deiner Klasse erledigst)
-
Könnt ein unvollständiger Smartpointer sein!

-
Stroustrup spricht hierbei von RAII (resource acquisition is initialization).
s.a. http://de.wikipedia.org/wiki/RAII
-
vielleicht 'EnvironmentStringsScopedPtr'?
-
Hallo,
schau dir mal Andrei Alexandrescus scopeguard an.http://www.ddj.com/dept/cpp/184403758
Erweiterung:
http://www.zete.org/people/jlehrer/scopeguard.html