Avatar ·

Les parenthèses après le nom du type dans l'opérateur new affectent-elles l'initialisation ?

Bonjour à tous ! J'ai commencé à étudier le C++ et je suis tombé sur un point que je ne comprends pas. Lorsque nous allouons de la mémoire avec `new`, je vois souvent deux variantes d'écriture : ```cpp int* p1 = new int; // sans parenthèses int* p2 = new int(); // avec parenthèses ``` Ou pour les classes : ```cpp MyClass* obj1 = new MyClass; MyClass* obj2 = new MyClass(); ``` Apparemment, il n'y a pas de différence, mais j'ai entendu quelque part que pour les types intégrés (int, double, etc.), les parenthèses peuvent influencer l'initialisation. J'ai vérifié avec un exemple simple : ```cpp #include int main() { int* a = new int; int* b = new int(); std::cout << *a << " " << *b; // Parfois affiche des déchets et 0 delete a; delete b; return 0; } ``` Effectivement, `*a` montre une valeur étrange, tandis que `*b` est toujours zéro. Pourquoi cela ? Et pour les classes, cela a-t-il aussi de l'importance ? Expliquez-moi, s'il vous plaît, comment fonctionne l'initialisation avec `new` et sans parenthèses. Et que se passe-t-il si on écrit `new int(42)` — cela définit-il explicitement la valeur ? Merci d'avance !