¿Afectan los paréntesis después del nombre del tipo en el operador new a la inicialización?
¡Hola a todos! Empecé a estudiar C++ y me encontré con un punto confuso. Cuando asignamos memoria mediante `new`, a menudo veo dos variantes de escritura:
```cpp
int* p1 = new int; // sin paréntesis
int* p2 = new int(); // con paréntesis
```
O para clases:
```cpp
MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass();
```
Parece que no hay diferencia, pero escuché en algún lugar que para tipos built-in (int, double, etc.) los paréntesis pueden afectar la inicialización. Lo comprobé con un ejemplo simple:
```cpp
#include
int main() {
int* a = new int;
int* b = new int();
std::cout << *a << " " << *b; // A veces muestra basura y 0
delete a;
delete b;
return 0;
}
```
Efectivamente, `*a` muestra un valor extraño, mientras que `*b` siempre es cero. ¿Por qué sucede esto? ¿Y para las clases también tiene importancia? Expliquen, por favor, cómo funciona la inicialización con `new` y sin paréntesis. ¿Y qué pasa si escribo `new int(42)`? Eso asigna un valor explícitamente, ¿verdad? ¡Gracias de antemano!