我有一个叫做Node
的类,它有两个构造函数。当我尝试从另一个调用其中一个构造函数并将其分配给调用者指向的内存时,我不会收到任何错误。但是,当我尝试使用new
到this
分配堆上分配的内存/对象时,我收到一个错误表达式不可分配。以下是我的代码。可能的原因是什么?在C++中为这个对象分配内存
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;
}
}
顺便说一下你的第二行(*此=节点();)是创建一个临时Node对象,然后使用编译器提供的默认赋值运算符(节点::运算符= (const Node&))将临时节点的状态复制到第一个节点对象的状态,然后销毁该临时节点对象。这很有效,但我认为你会避免这种情况,并直接初始化成员值。 –
@JeremyFriesner *“你不能从C++的另一个构造函数中调用一个构造函数”* - 你可以在C++ 11中。 – cdhowie
@cdhowie你是对的,我忘记了:) –