new中类型名后的括号:有区别吗?
大家好!我开始学习C++,遇到了关于`new`运算符的一个奇怪问题。当我为对象分配内存时,我看到两种写法:
```cpp
int* p1 = new int; // 无括号
int* p2 = new int(); // 有括号
int* p3 = new int(42); // 带值
```
或者对于类:
```cpp
MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass();
MyClass* obj3 = new MyClass(42);
```
看起来三种写法都能工作,但我注意到在某些情况下`new int`和`new int()`行为不同。例如,我读到对于内置类型(int、double等),`new int()`会将内存初始化为零,而`new int`会留下垃圾值。这是真的吗?
那么对于用户定义的类呢?如果类有默认构造函数,`new MyClass`和`new MyClass()`之间有区别吗?括号是否会影响对象是否被初始化?这与聚合初始化和初始化列表有什么关系?
请解释一下,谢谢!