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.