Avatar ·

Parênteses após o nome do tipo em new: há diferença?

Olá a todos! Comecei a estudar C++ e me deparei com uma coisa estranha com o operador `new`. Quando aloco memória para um objeto, vejo duas opções: ```cpp int* p1 = new int; // sem parênteses int* p2 = new int(); // com parênteses int* p3 = new int(42); // com valor ``` Ou para classes: ```cpp MyClass* obj1 = new MyClass; MyClass* obj2 = new MyClass(); MyClass* obj3 = new MyClass(42); ``` Parece que todas as três opções funcionam, mas notei que em alguns casos `new int` e `new int()` se comportam de forma diferente. Por exemplo, li que para tipos built-in (int, double, etc.) `new int()` inicializa a memória com zero, enquanto `new int` deixa lixo. Isso é verdade? E quanto a classes definidas pelo usuário? Há diferença entre `new MyClass` e `new MyClass()` se a classe tem um construtor padrão? Pode ser que os parênteses influenciem se o objeto será inicializado ou não? E como isso se relaciona com inicialização agregada e listas de inicialização? Expliquem, por favor.