定义一个结构体变量当然可以按照普通的方式进行初始化。
但是有的时候需要为struct的变量在heap中动态分配空间。 例如:
struct Demo
{
int d;
};
使用如下语句动态分配空间的时候, 有两种办法:
方法一:
Demo* demoPtr = new Demo;
法二:
Demo* demoPtr = new Demo();
这两种方式的区别区别如下:
使用 new Demo的时候,Demo后面没有括号, 称为 default initialization(注意不是default constructor, 要注意区分), 这是默认的初始化. 该变量的各个field被初始化为随机的数。
使用new Demo()的时候, Demo后面右括号, 称为default constructor(默认建构子), 此初始化的方法称为value initialization, 得到的是zero-initialized chunk of memory - all fields in this case will be zeros.。
上述的规则源于我们没有定义Demo的constructor, 当然我们也可以定义一个, 不过很少有人这样做。
#include <iostream>
using namespace std;
struct Demo {
int x;
};
int main() {
Demo demo1;
Demo* demo2 = new Demo; // fields are arbitary values
Demo* demo3 = new Demo();// zero initialized
demo1.x = 4;
cout << demo1.x << endl;
cout << demo2 -> x << endl;
cout << demo3 -> x << endl;
delete demo2;
delete demo3;
return 0;
}
运行结果为: