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 :

operator delete privé


Sujet :

C++

  1. #21
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Par défaut
    Pour revenir a ton probleme, il existe une specification (que je n'ai jamais utilise) qui permet de dire au compilateur qu'il n'y aura pas d'exceptions pendant la construction (ou tout autre methode) de ton objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class C
    {
    	void operator delete(void *,size_t ) { }
    	public:
    	__declspec(nothrow) C() {  }
     
    };
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	new C;
    }
    Et la ca compile, ce qui prouve bien que c'etait bien le probleme. Par contre __declspec(nothrow) est Microsoft specific donc pas portable. Sur gcc l'equivalent ca serait __attribute__((nothrow)).

    Il semble que l'equivalent a __declspec(nothrow) (en tout cas sur VC2005) soit:
    A savoir qu'en l'absence de cet attribut, c'est comme si le constructeur etait declare comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C() throw(...) {  }
    VC: http://msdn.microsoft.com/en-us/library/49147z04.aspx

    Bon week end a tous

  2. #22
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par unmanos Voir le message
    Pour revenir a ton probleme, il existe une specification (que je n'ai jamais utilise) qui permet de dire au compilateur qu'il n'y aura pas d'exceptions pendant la construction (ou tout autre methode) de ton objet:

    Il est recommandé de ne pas l'utiliser, ça pose d'autres problèmes. (Je ne me souviens plus lesquels mais tu pourras trouver facilement sur le net ou même sur ce forum, on en a déjà parlé).

  3. #23
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    La seule recommandation que j'ai vu sur le net auparavant a ce propos c'était de le mettre à la fin du projet quand tu sais ce qui throw ou pas, parceque ça permet au compilo d'eventuellement optimiser les appels (vu qu'il n'y a pas d'exception possible du coup).

  4. #24
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sauf que si tu es sur un compilateur aux normes, au lieu d'optimiser ça pessimise.

    __declspec(nothrow) a l'avantage sur throw() de ne pas se faire passer pour un truc standard, et de permettre véritablement une optimisation.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Débutant] Insert, Update, Search and Delete (CRUD operation) with SharePoint 2013 using VS 2012
    Par siffon dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 17/02/2014, 12h22
  2. operator new sans delete
    Par babar63 dans le forum C++
    Réponses: 21
    Dernier message: 26/02/2008, 22h33
  3. delete operator
    Par shirya dans le forum C++
    Réponses: 6
    Dernier message: 22/12/2005, 12h44
  4. Réponses: 3
    Dernier message: 23/08/2005, 11h02
  5. Namespace et surcharge operator new/delete
    Par ZeLegolas dans le forum C++
    Réponses: 11
    Dernier message: 26/07/2005, 13h55

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