初始化结构指针的值

pol*_*oig 2 c++ struct initializer

我开始学习cpp中的二叉树并动态分配内存; 因此初始化一个结构我这样做

struct node{
    int val;
    node* left;
    node* right;
};
//Initialize:
node* root = new node;
root->val = 7;
root->left = NULL;
root->right = NULL;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来设置struct值而不编写最后三行代码.我在一些网页上看到他们这样做:

int* n = new int(6);
Run Code Online (Sandbox Code Playgroud)

谢谢!

iBu*_*Bug 6

您可以编写自定义构造函数:

struct node{
    int val;
    node* left;
    node* right;
    node(int);
};

node::node(int _v){
    this->val = _v;
    this->left = this->right = nullptr;
}

node *root = new node(6); // Works as you want
Run Code Online (Sandbox Code Playgroud)

或者使用成员初始化列表,看起来更简单:

struct node{
    int val;
    node* left;
    node* right;
    node(int _v) : val(_v), left(nullptr), right(nullptr) {};
};
Run Code Online (Sandbox Code Playgroud)

不要忘记列表后面的大括号.


Sea*_*ton 6

除了 iBug 关于使用构造函数的答案之外,如果您的对象是普通旧数据类型,您可以使用聚合初始化来使用初始化列表来构造它,按以下方式,这根本不需要定义自己的构造函数:

node root = {7, nullptr, nullptr};
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在执行的操作是在堆上进行分配:

node* root = new node{7, nullptr, nullptr};
Run Code Online (Sandbox Code Playgroud)

您可以查看有关聚合初始化的页面以获取更多信息。