2017-10-22 8 views
-3

클래스 스택에 관계 연산자 ==을 오버로드합니다. 동일한 유형의 스택이 동일합니다. 그렇지 않으면 거짓.로컬 임시 객체에 대한 참조를 반환합니다.

내 코드 :

template <class Type> 
const stackType<Type>& stackType<Type>::operator == 
(const stackType<Type>& otherStack) 
{ 
    if (this->stackTop != otherStack.stackTop) 
     return false; 
    for (int i = 0; i < stackTop; i++) 
     if (this->list[i] != otherStack.list[i]) 
      return false; 
    return true; 
} //end operator== 

내가 로컬 임시 객체 경고에 반환 참조를 받고 그리고 난 함수 범위가 끝나면이 파괴되고 있다고 이해 것과. 누구든지이 경고를 해결하는 올바른 방향으로 나를 가리킬 수 있습니까?

+2

임시 임시로 참조를 반환하지 마십시오. – Ron

+0

경고를 피하려면 그냥하지 말아라. ref를 속성이나 할당 된 메모리 (new)로 안전하게 반환 할 수있다. – fievel

+0

@fievel하지만 왜 아무 것도 할당하지 않습니까? 묻는 사람은 분명히 bool을 반환해야하고 반환 유형을 망쳤습니다. – user4581301

답변

2

const stackType<Type>&, bt를 반환하도록 연산자를 선언하면 true 또는 false가 반환됩니다. 컴파일러에서 truefalseconst stackType<Type>&으로 변환 한 다음 반환하려고 시도합니다. 예상 한 내용과 다를 수 있습니다. bool을 반환하겠다고 선언하십시오.

변환이 작동하더라도 참조는 UB를 제공하는 로컬 변수에 대한 것입니다.

+0

맞음, bool이 될 의도 였지만 여전히 지역 임시 직원에게 반환됩니다. 나는 어떻게 임시 직원으로 돌아 가지 않습니까? – noslov

+1

'bool '을 반환하도록 정의 했습니까? 기본 데이터 유형으로는 절대 사용하지 마십시오. 그렇지 않으면 코드의 다른 위치에서 오류가 발생해야합니다. – Aganju