Wosiedem Posted May 14, 2009 Report Share Posted May 14, 2009 Od razu powiem, że to nie jest "ej, dlaczego mi to nie działa" (choć przyznaję, że sam nie znam odpowiedzi)... Poniżej wklejam kod, który nie działa pod Visual Studio 2008. Co znaczy nie działa? Program się wykrzacza, ale nie jest to nic trywialnego (pod gcc śmiga). O co tu chodzi? Wywalamy wyjątek (klasę ex) i potem próbujemy coś wyświetlić. Ciekawostką jest fakt, że obiekt przekazany przez referencję ma inny adres w pamięci (sic!). Nie jestem wstanie tego pojąć. Dodatkowo, gdy usuniemy któryś z komentarzy program zaczyna działać. Oczywiście próbowałem też kompilować z i bez optymalizacji itp - nadal to samo. Heca! Ktoś wie ocb? #include <iostream> #include <cstring> using namespace std; class Ex { char* str; public: Ex(const char* st) { str=new char[strlen(st)+1]; strcpy(str,st); cerr << "Konstruktor " << this << endl; } /*Ex(const Ex& e) { cerr << "Kopia " << this << " " << &e << endl; str="Kopia"; }*/ //virtual const char* co() const {cerr << "Co " << this << endl; return str;} //virtual ~Ex() { cerr << "Destruktor " << this << endl; delete [] str; } //virtual void f(){} }; int main(int argc, char** argv) { try { throw Ex("ERR"); } catch(const Ex& e) { cerr << "Catch" << endl; cout << e.co() << endl; } return 0; } Pozdrawiam, vo7 (; Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.