IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Copie d'une exception


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par d�faut Copie d'une exception
    Bonjour,

    Pourquoi faut il absolument qu'une exception puisse �tre copi� ?

    Par exemple, le code suivant ne compile pas car le compilateur ne trouve pas le constructeur par recopie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include <iostream>
    #include <sstream>
    #include <exception>
    #include <limits> 
     
    using namespace std;
     
    class MyException : public runtime_error
    {
       public :
          MyException( const char * what ) throw() : runtime_error( what ) {}
       private :
          MyException( const MyException & what ) throw();
          const MyException & operator=( const MyException & what ) throw();
    };
     
    int main()
    {
       try
       {
          throw( MyException( "because" ) );
       }
       catch( const exception & e )
       {
          cout << "main : " << e.what() << endl;
       }
     
       cout << "Appuyez sur entrée pour continuer...";
       cin.ignore( numeric_limits<streamsize>::max(), '\n' );
     
       return 0;
    }

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Normal, tu le d�clares mais tu ne le d�finis pas.
    Si tu veux pas le d�finir, ne le d�clare pas...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par d�faut
    Je le d�finit en private justement pour �viter de faire des copies sans le savoir.

  4. #4
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    D'apr�s ce que je viens de lire de la norme, si la classe de l'objet lanc� en exception ne poss�de pas de constructeur par recopie (ou de destructeur) accessible, le programme est malform�.


    L'explication qui me semble �tre � cela : un objet temporaire est cr�� par "MyException( "because" )". Un objet temporaire est ensuite allou� et construit avec le constructeur de recopie, c'est ce second objet qui est "lanc�".

    (je ne sais pas si c'est clair)

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Oulaaah. Tu confonds d�claration et d�finition.
    Tu d�clares un constructeur par recopie mais tu ne le d�finis pas.

    Si tu n'en d�clares pas, la copie normale sera effectu�e.

  6. #6
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Extrait de la norme :

    If the use of the temporary object can be eliminated without changing the meaning of the program except for the execution of constructors and destructors associated with the use of the temporary object (12.2), then the exception in the handler can be initialized directly with the argument of the throw expression. When the thrown object is a class object, and the copy constructor used to initialize the temporary copy is not accessible, the program is illformed (even when the temporary object could otherwise be eliminated). Similarly, if the destructor for that object is not accessible, the program is illformed (even when the temporary object could otherwise be eliminated).
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Par d�faut
    Merci pour ces r�ponse.

    Ca explique pourquoi le compilateur de visual me disais que je n'avais pas le droit d'utiliser cet objet dans une exception.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. error 80020009 une exception s'est produite
    Par Riouxe21 dans le forum ASP
    R�ponses: 6
    Dernier message: 21/12/2004, 11h01
  2. erreur :"une exception s'est produite"
    Par leborg dans le forum ASP
    R�ponses: 11
    Dernier message: 02/03/2004, 15h09
  3. [JSP] Affichage num�ro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    R�ponses: 12
    Dernier message: 23/09/2003, 14h59
  4. R�ponses: 2
    Dernier message: 28/08/2003, 00h00
  5. R�ponses: 3
    Dernier message: 01/11/2002, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo