Parenthèses après le nom du type dans new : y a-t-il une différence ?
Bonjour à tous ! J'ai commencé à apprendre le C++ et je suis tombé sur une chose étrange avec l'opérateur `new`. Quand j'alloue de la mémoire pour un objet, je vois deux variantes :
```cpp
int* p1 = new int; // sans parenthèses
int* p2 = new int(); // avec parenthèses
int* p3 = new int(42); // avec une valeur
```
Ou pour les classes :
```cpp
MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass();
MyClass* obj3 = new MyClass(42);
```
Apparemment, les trois variantes fonctionnent, mais j'ai remarqué que dans certains cas `new int` et `new int()` se comportent différemment. Par exemple, j'ai lu que pour les types intégrés (int, double, etc.) `new int()` initialise la mémoire à zéro, tandis que `new int` laisse des déchets. Est-ce vrai ?
Et qu'en est-il des classes utilisateur ? Y a-t-il une différence entre `new MyClass` et `new MyClass()` si la classe a un constructeur par défaut ? Est-il possible que les parenthèses influencent si l'objet est initialisé ou non ? Et comment cela est-il lié à l'initialisation agrégée et aux listes d'initialisation ?
Expliquez, s'il vous plaît.