- Mitglied seit
- 04.08.2002
- Beiträge
- 1.869
- Reaktionen
- 0
Hab hier gerade nen kleines Test-Programm von nem Arbeitskollegen bekommen und wir rätseln über die Ausgabe.
Zunächst mal das Programm:
Die Ausgabe ist folgende:
BEFORE f()
BEFORE g()
BEFORE creation
Constructor: 5
AFTER creation
Changed value to: 11
AFTER g()
Result: 11
Destructor: 11
AFTER f()
Das ganze wurde auf Solaris mit dem SUN Workshop Compiler gebaut.
Ich hätte erwartet, dass VOR der Ausgabe von "AFTER g()" einmal der Destuktor für das Objekt x aufgerufen wird, welches innerhalb der Methode g() auf dem Stack angelegt wird. Dies ist aber scheinbar nicht der Fall. Zu Hülf mit einer guten Erklärung!
thx,
M
Zunächst mal das Programm:
Code:
#include <cstdio>
#include <cstdlib>
#include <cstring>
class XYZ
{
private:
int n;
public:
XYZ()
{
n = 5;
printf("Constructor: %d\n", n);
}
~XYZ()
{
printf("Destructor: %d\n", n);
}
void set(int n)
{
this->n = n;
}
int get()
{
return n;
}
};
void f();
XYZ g();
int main()
{
printf("BEFORE f()\n");
f();
printf("AFTER f()\n");
return(0);
}
void f()
{
printf("BEFORE g()\n");
XYZ result = g();
printf("AFTER g()\n");
printf("Result: %d\n", result.get());
}
XYZ g()
{
printf("BEFORE creation\n");
XYZ x;
printf("AFTER creation\n");
x.set(11);
printf("Changed value to: %d\n", x.get());
return(x);
}
Die Ausgabe ist folgende:
BEFORE f()
BEFORE g()
BEFORE creation
Constructor: 5
AFTER creation
Changed value to: 11
AFTER g()
Result: 11
Destructor: 11
AFTER f()
Das ganze wurde auf Solaris mit dem SUN Workshop Compiler gebaut.
Ich hätte erwartet, dass VOR der Ausgabe von "AFTER g()" einmal der Destuktor für das Objekt x aufgerufen wird, welches innerhalb der Methode g() auf dem Stack angelegt wird. Dies ist aber scheinbar nicht der Fall. Zu Hülf mit einer guten Erklärung!
thx,
M
