003
30.12.2007, 21:11 Uhr
Kest
saint
|
Allgemein zu den temporären Objekten: z.B.:
C++: |
int x = 12; int y = 34+x*x;
|
Das Zwischenergebnis >x*x< muss irgendwo gespeichert werden; es wird auch als ein temporäres Objekt bezeichnet. Nach dem das Ergebis an >y< zugewiesen wird, wird dieses Zwischenergebnis gelöscht. Logisch, weil es nicht mehr gebraucht wird.
Zitat von RedEagle: |
Ich kann in diesem objekt auch andere Werte (z.B. int) speichern. Dort tritt dieses Problem nicht auf (dort wird auch kein destructor aufgerufen):
|
Ist ja auch selbstverständlich, weil fundamentale Typen gewöhnlich als >copy by value< geliefert werden, außer man erzwingt >copy by reference<. Ein Zeiger dagegen zeigt auf etwas; in deinem Fall auf ein Objekt, das zerstört wurde.
Zitat von RedEagle: |
(dort wird auch kein destructor aufgerufen)
|
Aufgerufen bestimmt. Dass aber nichts ausgegeben wird, könnte an >type == "s" && cfgvalue.s != NULL< liegen.
Ein ein wenig anschaulicherer Beispiel wäre:
C++: |
#include <iostream> #include <string>
class A { typedef std::char_traits<char> CT;
public: A(const char* a){ cur = new char[CT::length(a)+1]; CT::move(cur, a, CT::length(a)+1); } ~A(){ delete[] cur; }
const char* c_str() const{ return cur; }
private: char* cur; };
int main() { A a("hallo"); const char* za = a.c_str(); std::cout << za << std::endl;
const char* zb = A("ich bin's").c_str(); std::cout << zb << std::endl; }
|
>zb< zeigt zwar auf etwas; aber auf etwas, was schon nicht mehr existiert. Es könnte aber auch sein, dass die doch ausgegeben wird, aber wenn schon, dann nur zufällig. -- Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<. Dieser Post wurde am 30.12.2007 um 21:32 Uhr von Kest editiert. |