Wosiedem Napisano Maj 14, 2009 Zgłoś Share Napisano Maj 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.