Avatar ·

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