Avatar ·

¿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!