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.
No answers yet.
Faça login para deixar uma resposta