OVH Cloud OVH Cloud

est-ce une bonne astuce?

36 réponses
Avatar
dark poulpo
alors voila:

imaginons ce cas


void func()
{

ouvre(a);
ouvre(b);

test();
if (error()) { ferme(a); ferme(b); return; } // je le met sur un ligne pour
visualiser les 2 cas plus simplement

testa();
if (error()) { ferme(a); ferme(b); return; }

testb();
if (error()) { ferme(a); ferme(b); return; }

testc();
if (error()) { ferme(a); ferme(b); return; }

....
....

ferme(a);
ferme(b);
return;
}
//////////////////////////////
par
/////////////////////////////

void func()
{

ouvre(a);
ouvre(b);

while(1)
{
test();
if (error()) break;

testa();
if (error()) break;

testb();
if (error()) break;

testc();
if (error()) break;

....
....
break;
}
ferme(a);
ferme(b);
return;
}

qu'en pensez-vous?

10 réponses

1 2 3 4
Avatar
drkm
Fabien LE LEZ writes:

On Sun, 01 Aug 2004 23:59:31 +0200, drkm :

Pour la petite histoire, j'ai posé la question le lendemain au prof,
à qui j'ai dû expliquer RAII. Il m'a dit qu'il n'y avait pas moyen,
mais que de toute façon, un truc tordu comme ça ne devait servir à
rien.


Héhé... faut croire que la philosophie de programmation en Java (ou
C#, qui a aussi un garbage collector je crois) est très différente de
celle du C++.
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).


J'ai oublié de préciser qu'il ne s'agissait pas d'un cours sur Java
lui-même, mais d'un cours général sur la programmation orientée objet,
dont le langage de support est Java !

Les autres étudiants avaient déjà fait du Java, mais pas moi, pour
une histoire de passerelle depuis un autre établissement.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html


Avatar
drkm
Fabien LE LEZ writes:

De plus, si "new UneClasse()" renvoie une exception, l'assignation
d'un pointeur à "unObjet" ne se fait pas, et le delete a un
comportement indéfini.

Pour corriger ça, il faudrait écrire :

UneClasse* unObjet;
^^^^^^^^

try
{
unObjet = new UneClasse();
///
}
catch (les exceptions)
{
///
} finally {
delete unObject;
}


Je suppose que tu voulais dire :

UneClasse * unObjet = 0 ;

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Avatar
Andre Heinen
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C."
wrote:

Argh !
Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en
C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement
liée à un bloc try ...


Elle est reconnue par certains compilateurs, mais ce n'est pas du
C++ standard.

--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"

Avatar
Andre Heinen
On Sun, 01 Aug 2004 23:28:33 +0200, Fabien LE LEZ
wrote:

On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C."
:

Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en
C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement
liée à un bloc try ...


Ben non. Et, en pratique, on s'en passe plutôt bien :-)


De fait, Stroustrup nous dit qu'il n'y a pas besoin de finally en
C++ parce que RAII est presque toujours meilleur:
http://www.research.att.com/~bs/bs_faq2.html#finally

J'imagine qu'on a dû rajouter un "finally" en Java parce que le
programmeur n'a pas une parfaite maîtrise de la durée de vie des
objets ?


Effectivement, en Java il n'y a pas de destructeurs, donc pas de
RAII.

--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"


Avatar
Matthieu Moy
Fabien LE LEZ writes:

En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).


Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer
à la main !

--
Matthieu

Avatar
Cyrille Karmann
Matthieu Moy disait:
Fabien LE LEZ writes:

En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).


Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-).


Oui, enfin on peut demander par un appel à System.gc() au garbage
collector de lancer tout de suite le recyclage des objets inutilisés,
mais d'après la doc il semble y avoir garantie de moyens, pas de
résultats.

Donc, en pratique, il vaut mieux les fermer à la main !


En effet.

--
Cyrille


Avatar
Loïc Joly
Matthieu Moy wrote:
Fabien LE LEZ writes:


En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).



Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer
à la main !


D'après ce que j'ai compris (je n'ai jamais utilisé Java), il y a aussi
quelques cas particuliers utilisants une écriture de type RAII, mais
uniquement pour u type particulier, (synchronized pour des mutex) et non
extensibles aux types utilisateurs.

--
Loïc


Avatar
Fabien LE LEZ
On Mon, 02 Aug 2004 20:45:34 +0200, Matthieu Moy
:

Donc, en pratique, il vaut mieux les fermer
à la main !


Comme en C.


--
;-)

Avatar
Jean-Marc Bourguet
Matthieu Moy writes:

Fabien LE LEZ writes:

En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).


Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les
fermer à la main !


Comme en C++ si on veut gerer correctement les erreurs.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Fabien LE LEZ
On 03 Aug 2004 08:20:34 +0200, Jean-Marc Bourguet :

[les fichiers]
Donc, en pratique, il vaut mieux les fermer à la main !

Comme en C++ si on veut gerer correctement les erreurs.


Quand tout se passe bien, oui.
Mais en cas d'exception, s'il n'est de toutes façons pas possible
d'enregistrer des informations correctes dans le fichier, la fermeture
automatique est bien pratique :-)


--
;-)

1 2 3 4