2014-11-13 3 views
1

외부 포인터와 연결된 포인터로 구성된 스택을 사용하는이 코드는 깊거나 얕은 복사본을 만들지는 알 수 없습니다. 미안하지만 충분한 정보가 없다면, 이것이 당신이 말해야 할 것이라고 생각합니다. 고맙습니다!내 코드가 객체의 깊거나 얕은 사본을 생성합니까?

void StackClass::operator =(const StackClass& orig) 
{ 
    //stack = nullptr; 
    node* temp = orig.stack; 
    if (!orig.IsEmpty()) 
    { 
     while (temp != NULL) 
     { 
      stack = orig.stack; // sets thew new stack equal to the old stack's value 
      temp = temp->next; 
     } // end while loop 
    } // end if 
    else 
    { 
     stack = nullptr;   // sets it to an empty list because there's no values 
    } // end else 
} 
+1

... 당신이 명시 적으로 새 포인터를위한 메모리를 할당하고 코드가없는 것으로 일어나는 것을로 포인터 전달의 내용을 저장할 포인터를 복사하는 것보다 의미 포인터 만 복사하면 포인터가 복사됩니다. –

+0

@JonathanPotter 포인터 일 뿐이므로 깊은 사본을 만들지는 않습니다. – SiggyxLeGiiT

+0

코드가 완전히 엉망입니다. 시작을 위해서는'orig'에서 어떤 것도 복사하기 전에'* this' 객체의 스택에있는 기존 요소를'삭제 '해야합니다 .... 깊은 복사를하려면'new'를 호출해야합니다 (간접적으로'new's와 같은 다른 함수를 호출하여 간접적으로) - 분명히이 코드는'stack'이 실제로'node *'인 경우에는 그렇게하지 않습니다. –

답변

1

이 경우 단지 포인터 만 복사하는 것입니다. 즉, 얕은 복사본이 유효합니다. stack` 단지 인`경우

깊은 복사

+0

그러면 각 연결된 목록 데이터에서 모든 값을 복사하여 새 값에 넣어야합니다. – SiggyxLeGiiT

+0

네 코드에 하나의 미가공 포인터가 있다면 ... – ravi

+0

내 스택은 "데이터"와 함께 하나의 조각을 가진 구조체와 다른 하나는 목록의 다음 값으로 이동하는 노드 * 다음으로 구성됩니다 . 포인터 스택은 스택 맨을 가리 킵니다. – SiggyxLeGiiT