[Dcmlib] : try-catch apres new
Jean-Pierre ROUX
jean-pierre.roux at creatis.insa-lyon.fr
Tue Apr 26 08:35:39 CEST 2005
At 18:23 -0400 25/04/05, Mathieu Malaterre wrote:
[...]
>
>Donc non: on ne fais pas de try catch. Le seul try catch en c++ qui
>est possible c'est celui du 'new'.
C'est a *ce* cas que je pensais.
Tellement intoxique par le C que je n'ai jamais du ecrire qq chose comme :
gdcm::File f();
j'ai toujours ecrit
gdcm::File *f = new gdcm::File();
et ca m'iritais profondément que le pointeur ne soit pas NULL en cas d'echec...
J'avais considére que le try-catch etait la solution (meme si je n'en
avais pas mis dans les tests :-(
Ca ne me choquerais pas de dire <<si vous utilisez gdcm et que vous
tenez a tester les echecs dans les contructeurs, n'utilisez les
contructeurs qu'avec 'new', et pas sur un objet declaré
statiquement.>>
>Genre on atteint les limites physique de la machine et la ben oui
>faut bien faire un traitement de derniere chance. Mais entre nous tu
>ne peux pas demander a un util de faire des try catch de partout
>dans son code.
>
>En revanche tu peux parfaitement faire:
>
>gdcm::Serie s =
>s.SetDirectory( "bla" );
>
>try
> {
> s.GetFirstSerie()
> }
>catch
> {
> cerr << "Echec parce que:" << error.Print() ...
> }
>
>dans la meme genre l'utilisateur devrait mettre un try/catch au
>moment de l'ecriture:
>
>gdcm::FileHelper f
>
>try
> f.Write()
>catch
> cerr << "Echec"
>
>
>Entre parenthese je sais meme pas si c'est possible de mettre un try
>catch sur la construction d'un objet: comment tu fais pour le
>declarer:
>
>try
>{
> gdcm::File f("");
>}
>catch
>{
>}
>
>f.GetImageData() -> echec du compilo
>
>-> on est sortie du scope , on n'a plus access a f. Ca veut dire que
>ne peut plus faire d'objet sur la pile, a chq fois il faudrait faire
>un pointeur puis affectation:
>
>gdcm::File *f;
>
>try
>{
> f = new gdcm::File("");
>}
>catch
>{
>}
C'est pile ce que je voulais faire ...
Qu'est ce qu'il ya de choquant la dedans?
En C, chaque fois qu'on 'fabrique' un simili-objet avec une fonction
d'allocation, on teste bien le pointeur ...
Si on veut tester l'echec dans le constructeur (par new), on n'a pas
d'autre choix, non?
>
>DU DELIRE !
>
Ah, bon ?
JPRx
Jean-Pierre ROUX
UMR CNRS 5515-CREATIS
Laboratoire de Radiologie Experimentale
Hopital Cardiologique
28 Avenue du Doyen LEPINE
B.P. Lyon-Montchat
69394 Lyon Cedex 03
Tel : (+33) 04 72 35 74 12
Fax : (+33) 04 72 68 49 16
URL : http://www.creatis.univ-lyon1.fr
e-mail : jpr at creatis.univ-lyon1.fr
More information about the Dcmlib
mailing list