Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion des Exceptions

25 réponses
Avatar
Michael Moreno
Bonjour,

Il me semble qu'en C++, le try-finally n'existe pas.

Je me demande par consequent quelle est la facon pour eviter la
repetition de code du genre

EnterCriticalSection(...);
try
{
...
LeaveCriticalSection(...);
}
catch(...)
{
LeaveCriticalSection(...);
}

Merci pour votre aide,

Michael

--
----
http://michael.moreno.free.fr/

10 réponses

1 2 3
Avatar
Marc Boyer
In article , Michael Moreno wrote:
Bonjour,

Il me semble qu'en C++, le try-finally n'existe pas.

Je me demande par consequent quelle est la facon pour eviter la
repetition de code du genre

EnterCriticalSection(...);


{
Lock l();
try {
...
} catch {
...
}
}

Avec Lock un objet dont le constructeur fait
EnterCriticalSection
et un destructeur qui fait
LeaveCriticalSection

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Michael Moreno
Avec Lock un objet dont le constructeur fait
EnterCriticalSection
et un destructeur qui fait
LeaveCriticalSection


Merci, je cherchais a faire cela avec un objet mais je ne suis pas
convaincu que ce soit vraiment genial car on j'aurai souvent besoin de
parametres/pointeur et cela me conduirait a creer plein d'objets
differents.

--
----
http://michael.moreno.free.fr/

Avatar
Marc Boyer
In article , Michael Moreno wrote:
Avec Lock un objet dont le constructeur fait
EnterCriticalSection
et un destructeur qui fait
LeaveCriticalSection


Merci, je cherchais a faire cela avec un objet mais je ne suis pas
convaincu que ce soit vraiment genial car on j'aurai souvent besoin de
parametres/pointeur et cela me conduirait a creer plein d'objets
differents.


Je ne te suis pas.
En fait, tu peux passer au constructeur de ton objet tous les
paramètres que tu passais à "EnterCriticalSection". Non ?

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.


Avatar
Michael Moreno
Oui, mais parfois je veux utiliser plusieurs couples :
1 - EnterCriticalSection et LeaveCriticalSection
2 - SafeArrayAccessData et SafeArrayUnaccessData
3 - new et delete
etc

Cela va me conduire a creer de nombreux objets specialises, non ?

--
----
http://michael.moreno.free.fr/
Avatar
Christophe Lephay
"Michael Moreno" a écrit dans le message
de news:
Oui, mais parfois je veux utiliser plusieurs couples :
1 - EnterCriticalSection et LeaveCriticalSection
2 - SafeArrayAccessData et SafeArrayUnaccessData
3 - new et delete
etc

Cela va me conduire a creer de nombreux objets specialises, non ?


C'est un peu (voire completement ?) le principe de l'idiome RAII. Le finally
est exécuté par les destructeurs de tes objets...

Chris

Avatar
Marc Boyer
Michael Moreno wrote:
Oui, mais parfois je veux utiliser plusieurs couples :
1 - EnterCriticalSection et LeaveCriticalSection
2 - SafeArrayAccessData et SafeArrayUnaccessData
3 - new et delete
etc

Cela va me conduire a creer de nombreux objets specialises, non ?


Je ne vois pas en quoi ce sera pire que de le faire à la main
dans le code à chaque fois.
En plus, un rien de template peut pas mal factoriser le
code.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Fabien LE LEZ
On Tue, 14 Dec 2004 11:24:42 GMT, Michael Moreno
:

Je me demande par consequent quelle est la facon pour eviter la
repetition de code du genre


RAII
http://groups-beta.google.com/groups?as_q=RAII&safe=images&as_ugroup=fr.comp.lang.c%2B%2B&lr=&hl=en


--
;-)

Avatar
Christophe Lephay
"Fabien LE LEZ" a écrit dans le message de news:

On Tue, 14 Dec 2004 11:24:42 GMT, Michael Moreno
:

Je me demande par consequent quelle est la facon pour eviter la
repetition de code du genre


RAII
http://groups-beta.google.com/groups?as_q=RAII&safe=images&as_ugroup=fr.comp.lang.c%2B%2B&lr=&hl=en


Oh je me vois dedans !

Merci Fabien, encore mieux que monsieur Propre ;)

(bon, off-topic, je sais)

Chris


Avatar
Arnaud Debaene
Michael Moreno wrote:
Oui, mais parfois je veux utiliser plusieurs couples :
1 - EnterCriticalSection et LeaveCriticalSection
2 - SafeArrayAccessData et SafeArrayUnaccessData
3 - new et delete
etc

Cela va me conduire a creer de nombreux objets specialises, non ?


Ce sont de petits objets qui s'écrivent en 3 lignes. Notes au passage que
pour new/delete, le wrapper existe déjà : c'est boost::scoped_ptr (ou
std::aut_ptr si tu n'as pas peur...)

Ceci dit, si tu veux une version générique, regardes du côté de ScopeGuard
(http://www.cuj.com/documents/s€00/cujcexp1812alexandr/). Dans ton cas, la
fonctionnalité "Dismiss" ne t'intéresse pas.

Arnaud

Avatar
Michael Moreno
Merci a tous.

RAII
http://groups-beta.google.com/groups?as_q=RAII&safe=images&as_ugroup=fr.comp.lang.c%2B%2B&lr=&hl=en


Y a vraiment pas une autre solution ?
Cette solution est basee sur le "Out Of Scope" et dans certains cas je
trouve que c'est limitant.

--
----
http://michael.moreno.free.fr/

1 2 3