| |
Juni 2003 C++-Diagramm: Diagramm für strukturierte Arten 1-25 1 T_var erbringt so Besitz von seinem T * zum Anrufer von _ retn() ohne zu benennen Löschung auf ihr und dem Anrufer wird für schließlich löschen zurückgebracht verantwortlich T * . Eine Beispielimplementierung solchen a _ retn() Funktion wird unten gezeigt: // C++ T * T_var::_retn() { // nehmen Sie an, daß PTR _ das T * Datenmitglied des T_var ist T * tmp = PTR _; PTR _ = 0; Rückholtmp; } Dieses erlaubt z.B. eine Methodenimplementierung zum Speichern eines T * als mögliches Rückhol Wert in einem T_var damit es gelöscht wird, wenn eine Ausnahme geworfen wird, und doch, zu in der Lage zuSEIN erwerben Sie Steuerung des T * in der LageSEIN, es richtig zurückzubringen: // C++ T_var t = neues T;// t besitzt Zeiger zu T wenn (exceptional_condition) { // t besitzt den Zeiger und wird ihn löschen //, da der Stapel am Throw abgewickeltes liegt Throw AnException(); } ... Rückkehr t._retn(); // _ retn() nimmt Besitz von // Zeiger von t Nach _ retn() wird auf einem T_var hervorgerufen Fall, sein internes T * Zeiger ist, so ungültig irgendeinen seines überbelasteten Operators hervorrufen - > Funktionen, ohne a zuerst zuzuweisen gültiges Nichtnull t * zum T_var versucht, den ungültigen Zeiger zu dereferenzieren, der ist ungültig in C++. Aus Gründen der Übereinstimmung das T_var Arten werden auch für längenkonstantes produziert strukturierte Arten. Diese Arten haben die gleiche Semantik wie T_var Arten für Variable Längenarten. Dieses erlaubt, daß Anwendungen in T_var ausgedrückt kodiert werden Arten gedankenlos von, ob die zugrundeliegenden Arten örtlich festgelegt oder mit variabler Länge sind. T_var Arten für örtlich festgelegtes Länge strukturierte Arten haben die folgende allgemeine Form: // C++ Kategorie T_var { Öffentlichkeit: T_var(): m_ptr(0) { } T_var(T * t): m_ptr(t) { } T_var(const T& t): m_ptr(new T(t)) { } &t T_var(const T_var): m_ptr(0) { wenn (t.m_ptr! = 0) m_ptr = neues T(*t.m_ptr); } ~T_var() { Löschungm_ptr; } &operator=(T T_var * t) { |  |
|
| |
|
|