exceptiony
Tomas Vasko
vasko na pobox.sk
Neděle Květen 31 21:51:44 CEST 1998
zdravim;
mam taky dost zasadny problem s c++ exceptionami...
tento prog:
--------
#include <iostream.h>
class Exception { protected: Exception(){}; };
class ExcError : public Exception{};
int main()
{
try{
throw new ExcError();
cout << "a" <<endl;
}
catch( Exception* )
{
cout << "Exception*" <<endl;
}
catch( ExcError* )
{
cout << "ExcError*" <<endl;
}
return 0;
}
--------
by mal podla mna vypisat Exception a skoncit.
vypisuje vsak ExcError!
kompiloval som c++ -fhandle-exceptions -ansi -Wall % (aj bez -ansi)
using c++ -v --> 2.7.2.3
viete niekto preco to tak divne kompiluje?
da sa nejak gecececko prinutit kompilovat to spravne?
bye,
tomas
p.s.
watcom takuto konstrukciu vobec nezhltne - vyhlasi error na riadku
catch( ExcError*) s tym ze to nema zmysel, co je dost normalne a borland
na to aspon upozorni...
p.p.s
btw another exc. problem:
uz davnejsie som mal problemik s niecim takymto:
-------
#include <signal.h>
#include <stdio.h>
class TDivision_by_zero
{ };
class Tmp
{
public:
Tmp() { printf(" creating Tmp\n"); }
~Tmp() { printf(" destructing Tmp\n"); }
};
void SigFPE( int )
{
signal(SIGFPE, SigFPE);
throw TDivision_by_zero();
}
void f()
{
Tmp tmp;
int a=0;
a=1/a; // tu je delenie nulou
tmp=tmp;
}
int main()
{
signal( SIGFPE, SigFPE);
try
{
f();
}
catch( TDivision_by_zero )
{
printf("odchytene division by zero.");
exit(1);
}
}
-------
problem je ze sa nevola destruktor instancie tmp deklarovanej vo f().
kompiloval som zase gcc v 2.7.2.3 na amd k6, na intel pentium, amd {3,4}86
nikde sa destruktor nevolal.
potom som to kompiloval na decoch a sparcoch, gcc 2.7.2, uz si nepametam na
ktorom, ale na jednom to zbehlo korektne a na druhom dumplo core...
zrejme to bude aj nejak hardwarovo zavisle...
vie o tomto niekto nieco ?
--
Black holes are merely where God divided by zero.
Další informace o konferenci Linux