두 개의 생성자가있는 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;
}
}
Btw는 두 번째 라인 (*이 노드 (=)를) 다음 컴파일러에서 제공하는 기본 할당 연산자 (노드 :: 연산자를 사용하여, 임시 노드 객체를 생성한다 = (const Node &))를 사용하여 임시 노드의 상태를 첫 번째 노드 객체의 상태로 복사 한 다음 임시 Node 객체를 삭제합니다. 그게 효과가 있지만, 피하는 것이 좋을 것입니다. 멤버 값을 직접 초기화하는 것이 좋습니다. –
@JeremyFriesner * "C++의 다른 생성자에서 하나의 생성자를 호출 할 수 없습니다"* - C++ 11에서 할 수 있습니다. – cdhowie
@cdhowie 맞아, 나는 그걸 잊어 버렸다. :) –