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 !
No answers yet.
Connectez-vous pour laisser une réponse
Blogs