在C中,我们实际上做到了
struct node *p = (node*)malloc(sizeof(node)); // casting is not necessary
p->a = 0; // first element
p->b = NULL; // second element
Run Code Online (Sandbox Code Playgroud)
动态分配内存中的空格,但我怎么能用C++方式呢?
线下面是正确的猜测吗?
node *p = new node {0, NULL};
Run Code Online (Sandbox Code Playgroud)
是的,你是对的.
假设node
是一个聚合,你的C++版本是正确的(模数NULL
而不是nullptr
).
话虽这么说,如果这些初始值是"默认值",您通常会编写一个默认构造函数来自动初始化这些成员:
struct node
{
int a;
node* b;
node() : a(0), b(nullptr) {}
};
Run Code Online (Sandbox Code Playgroud)
然后你只需写:
node* p = new node;
Run Code Online (Sandbox Code Playgroud)
或更好:
auto p = std::make_unique<node>();
Run Code Online (Sandbox Code Playgroud)
或者,更好的是:
node n;
Run Code Online (Sandbox Code Playgroud)
默认构造虽然有一些后果.您可能不需要任何构造函数.