在 c++ 中为此对象分配内存

Allocating memory to this object in c++

本文关键字:对象 分配 内存 c++      更新时间:2023-10-16

我有一个名为Node的类,它有两个构造函数。当我尝试从另一个构造函数调用其中一个构造函数并将其分配给调用者指向的内存时,我没有收到任何错误。但是当我尝试使用 new 分配堆上分配的内存/对象时this我得到一个不可分配的错误表达式。以下是我的代码。可能的原因是什么?

class Node{
    private:
       int key;
       Node* left, *right;
    public:
       Node(){
           left=NULL;
           right= NULL;
       }
       Node(int data){
           this=new Node(); // generates error 'expression is not assignable'
           *this= Node();   //compiles succesfully
           this->key=data;   
       }
}

C++11 允许委派构造函数:

class Node {
    private:
       int key;
       Node* left, right;
    public:
       Node() {
           left = NULL;
           right = NULL;
       }
       Node(int data) : Node() {
           this->key=data;   
       }
};

关于代码的其他一些注释:


Node* left, right;

这声明left是指向Node的指针,rightNode(不是指针),就好像你写了这个一样:

Node* left;
Node right;

这就是为什么将星号放在变量的左侧,而不是类型的右侧:

Node *left, *right;

或者,甚至更好:

Node *left;
Node *right;

left = NULL;

在 C++11 中,使用 nullptr 而不是 NULL 。 无论如何,您应该使用初始值设定项列表:

Node() : left(nullptr), right(nullptr) { }