Avatar ·

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.