在c ++中为这个对象分配内存

时间:2017-10-07 03:57:17

标签: c++ this

我有一个名为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;   
       }
}

1 个答案:

答案 0 :(得分:4)

C ++ 11允许delegating constructors

Node* left, right;

关于您的代码的一些其他评论:

left

这声明Node指针指向 - rightNode指向Node* left; Node right; (不是指针),就像你写了这样:

Node *left, *right;

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

Node *left;
Node *right;

或者,甚至更好:

left = NULL;
nullptr

在C ++ 11中,使用NULL代替Node() : left(nullptr), right(nullptr) { } 。你应该使用初始化列表:

{{1}}