Avatar ·

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()`之间有区别吗?括号是否会影响对象是否被初始化?这与聚合初始化和初始化列表有什么关系? 请解释一下,谢谢!