new操作符中类型名后的括号是否影响初始化?
大家好!我开始学习C++,遇到了一个不太明白的地方。当我们通过`new`分配内存时,我经常看到两种写法:
```cpp
int* p1 = new int; // 无括号
int* p2 = new int(); // 有括号
```
或者对于类:
```cpp
MyClass* obj1 = new MyClass;
MyClass* obj2 = new MyClass();
```
看起来没有区别,但我听说对于内置类型(int、double等),括号可能会影响初始化。我用一个简单例子验证了一下:
```cpp
#include
int main() {
int* a = new int;
int* b = new int();
std::cout << *a << " " << *b; // 有时输出垃圾值和0
delete a;
delete b;
return 0;
}
```
确实,`*a`显示奇怪的值,而`*b`总是0。为什么会这样?对于类来说,这也重要吗?请解释一下带括号和不带括号时`new`的初始化是如何工作的。另外,如果写成`new int(42)`,这显然是显式指定值,对吧?提前谢谢!