2010-12-02 7 views
2

Possible en double:
Do the parentheses after the type name make a difference with new?Quelle est la différence entre `new` et` new() `pour une structure en C/C++?

Dans un code, je l'ai vu récemment un struct comme celui-ci:

typedef struct MyStruct { 
    int numberOne; 
    int numberTwo; 
} MYSTRUCT; 

Plus tard, j'ai essayé instancier un de ces struct utilisant

MyStruct *pStruct = new MyStruct(); 

qui a bien fonctionné avec Visual Studio 2010, mais a échoué avec une erreur de lien obscure sur un autre compilateur. Il a fallu un certain temps avant de découvrir que l'omission des accolades comme ceci

MyStruct *pStruct = new MyStruct; 

a résolu le problème. Alors, quelle est exactement la différence entre ces deux invocations et laquelle est la bonne à utiliser?

+0

Je pense que vous avez un typedef redondant (ou un nom manquant pour le typedef), aussi 'new' renvoie un pointeur pas un objet. –

+1

typedef struct MyStruct { int numberOne; int nombreTwo; }; est une erreur –

+0

@Armen: En fait, aucune des lignes d'origine ne devrait avoir été compilée. Que je suis bête. – bastibe

Répondre

1

new MyStruct exécute initialisation par défaut, ce qui dans votre cas ne fait rien.

new MyStruct() exécute l'initialisation de la valeur, ce qui dans votre cas définit les deux variables int sur zéro.

Questions connexes