Avatar ·

Paréntesis después del nombre del tipo en new: ¿hay diferencia?

¡Hola a todos! Empecé a estudiar C++ y me encontré con algo extraño con el operador `new`. Cuando asigno memoria para un objeto, veo dos opciones: ```cpp int* p1 = new int; // sin paréntesis int* p2 = new int(); // con paréntesis int* p3 = new int(42); // con valor ``` O para clases: ```cpp MyClass* obj1 = new MyClass; MyClass* obj2 = new MyClass(); MyClass* obj3 = new MyClass(42); ``` Aparentemente las tres opciones funcionan, pero noté que en algunos casos `new int` y `new int()` se comportan de manera diferente. Por ejemplo, leí que para tipos built-in (int, double, etc.) `new int()` inicializa la memoria a cero, mientras que `new int` deja basura. ¿Es cierto? ¿Y qué pasa con las clases definidas por el usuario? ¿Hay diferencia entre `new MyClass` y `new MyClass()` si la clase tiene un constructor por defecto? ¿Podría ser que los paréntesis afecten si el objeto se inicializa o no? ¿Y cómo se relaciona esto con la aggregate initialization y las listas de inicialización? Explíquenme, por favor.