Os parênteses após o nome do tipo no operador new afetam a inicialização?
Olá a todos! Comecei a estudar C++ e me deparei com um ponto confuso. Quando alocamos memória com `new`, vejo frequentemente duas formas de escrever:
```cpp
int* p1 = new int; // sem parênteses
int* p2 = new int(); // com parênteses
```
Ou para classes:
```cpp
MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass();
```
Aparentemente não há diferença, mas ouvi em algum lugar que para tipos primitivos (int, double, etc.) os parênteses podem afetar a inicialização. Testei com um exemplo simples:
```cpp
#include
int main() {
int* a = new int;
int* b = new int();
std::cout << *a << " " << *b; // Às vezes imprime lixo e 0
delete a;
delete b;
return 0;
}
```
De fato, `*a` mostra um valor estranho, enquanto `*b` é sempre zero. Por que isso acontece? E para classes isso também importa? Expliquem, por favor, como funciona a inicialização com `new` e sem parênteses. E o que acontece se escrever `new int(42)` — isso define explicitamente o valor, certo? Agradeço desde já!
<<