000
27.01.2006, 11:36 Uhr
~UlfB
Gast
|
Hallo allerseits,
mir ist da ein Unterschied zwischen GCC und MSVC6 aufgefallen. Wenn eine Methode ein Objekt zurückgibt, dann läuft bei MSVC vor der Rückgabe aus der Methode der Destruktor des zurückzugebenden Objekts ab. Das ist ziemlich ärgerlich, was soll ich mit einem Objekt, dessen Destruktor schon gelaufen ist? Unter GCC läuft alles wie erwartet, der Destruktor wird am Ende des Scopes der "main" Klammerung ausgeführt.
Hat dafür jemand eine Erklärung?
Hier der Beispiel-Code:
C++: |
#include <stdio.h> #include <stdlib.h> #include <string.h>
class Data { public: Data(const char *str) { m_str = new char[256]; strcpy(m_str, str); printf("Constructor (%s)\n", str); }
~Data() { printf("Destructor (%s)\n", m_str); delete m_str; }
inline const char *getStr() { return m_str; } protected: char *m_str; };
Data createData() { Data d("Created inside method");
return d;
// hier ist der Destruktor von d bereits gelaufen (nur bei MSVC) }
/****************************************************************************/
int main(int argc, char *argv[]) { { Data d = createData();
printf("Data d = [%s]\n", d.getStr());
// hier kommt der Destruktor von d (aber nur bei GCC!) } fgetc(stdin); return 0; }
|
mod edit: benutze die CPP TAG SELBER! Dieser Post wurde am 27.01.2006 um 11:43 Uhr von Pablo editiert. |