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