[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux-team] [OUT OF TOPIC][C++] Lacunes en C++
> Michael Stilmant wrote:
>
> Ok merci,
>
> Mais ... j'aime pas trop (mais j'apprécie ta réponse) ce genre de programmation à la Microsoft
>
Ah non! C'est super propre au contraire! C'est dans les specs du C++ et ca cert precisement a ca.
> il me semble avoir entendu quelque part un truc du genre, il faut toujours catcher les exceptions sinon c'est une erreur fatal. (Cfr dr watson)
>
Ca depend du compilo et du system. Avec gcc sous Linux, ca cause une terminaison du programme mais ca ne genere pas de core dump ou autre trucs marants.
Je ne crois pas que ca genere un Dr Watson sous Windows.
> si quelqu'un utilise cette classe, elle doit être au courrant non ?
Pas oblige mais le programme s'arretera alors. Si tu veux pas, faut catcher l'exception.
>
> et que ce passe t'il si une variable de type philo_with_throw est déclarée en dehors de toutes fonctions, en global ?
>
Et ben ton programme est susceptible de stopper au demarrage, en initialisant l'instance de la classe. Mais tu peux declarer une variable globale de type philo_with_throw * et dans le main (), tu fais:
try {
global_var = new philo_with_throw;
} catch (philo_throw x) {
... // recovery code here
}
Mais les variables globales, ca, c'est pas bo.
f.
> rem: j'ai jamais aimé la philo car il y avait toujours plus de questions lors d'une réponse ...
>
> -----Original Message-----
> From: Pascal Bleser [mailto:pbleser@atos-group.com]
> Sent: mardi 25 janvier 2000 12:46
> To: linux-team@rtfm.be
> Subject: Re: [linux-team] [OUT OF TOPIC][C++] Lacunes en C++
>
> On Tue, Jan 25, 2000 at 12:23:07PM +0100, Michael Stilmant wrote:
> > Je refais du C++ après un petit temps et je tombe sur un os.
> > J'aimerais créer une classe dont le constructeur initialise une
> > variable avec l'appel d'une fonction.
> > Mais voilà, je peux tester le retour de cette fonction, et je ne
> > sais pas comment je doit réagir si cette fonction retourne une erreur et
> > donc que la variable n'est pas initialisée. La variable n'étant pas
> > initialisée, l'objet (classe) n'a plus de raison d'être.
> Ben, tu jettes une exception évidemment...
> ...
> > variable=fonction_qui_est_dans_une_librairie_pas_a_moi_qui_initialise_de
> > s_trucs();
> > if (variable==NULL) {
> > // pas bonne initialisation
> > // qu'est-ce que je fais
> tu fais un throw, hein, m'fi ;))
> ...
> > Maintenant je cherche un truc qui permet à la (aux) fonction(s)
> > qui crée(nt) un object de type philo que ca c'est mal passé du coté
> > constructeur.
> >
> > du genre
> >
> > philo *my_philo_variable;
> >
> > if ((my_philo_variable=new philo)== NULL) {
> > // ok c'est ko
> > }
>
> // NB: ça fait longtemps, en effet... un nom de classe *doit* commencer
> // par une majuscule (a moins de vouloir programmer comme un forain) ;))
>
> #include <String.h>
>
> class PhiloException
> {
> public:
> String cause;
> PhiloException(const char* s) : cause(s) {};
>
> };
>
> class Philo
> {
> private:
> Foo* foo;
> public:
> Philo()
> {
> foo = fonction_qui_init_foo();
> if (!foo) throw(PhiloException("zut! a pas marché"));
>
> }
>
> ~Philo()
> {
> if (foo) fonction_qui_nique_foo();
>
> }
> };
>
> Philo* pMyPhilo;
>
> try {
> pMyPhilo = new Philo;
> } catch (PhiloException e) {
> // crotte, a pas marche
> cout << "philo is dead, cause: " << e.cause << endl;
> };
>
> > Si quelqu'un à quelques idées sur cette question philosophique.
> Voilà ;)
>
> --
> -o) / Pascal Bleser ATOS Payment Systems|
> /\\ \ C++/UNIX Development Aachen, Germany|
> _\_v \<guru@linuxbe.org> <pbleser@atos-group.com>|
> ---------------------------------------------------|
> I gave up Smoking, Drinking and Sex. :
> It was the most *horrifying* 20 minutes of my life!:
> ---------------------------------------------------'
>
> ---------
> Visit the Linux Supertore Online: http://www.redcorp.com !
> If you want to be deleted from the list, send a mail to
> majordomo@rtfm.be with "unsubscribe linux-team" in the body.
> Archive of the list: http://tania.be.linux.org/
--
------------------------- * oOo * -------------------------
CiscoSystems
Frederic Detienne, CDE
Security & Network Services
Tel 32 2 705 55 55
---------
Visit the Linux Supertore Online: http://www.redcorp.com !
If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.
Archive of the list: http://tania.be.linux.org/