작성
·
232
0
T& Pop()
{
T ret = data[Size - 1]; // _data가 동적배열
_Size--; // 크기 1 줄여서
return ret; // 반환한다
}
에서 T ret = data[Size - 1]; 에서
더 이상 유효하지 않은 데이터라
Pop()함수의 반환형을 T&같이 주소로는 반환할 수 없고
T처럼 복사를 하는 방식으로 반환한다고 하셨는데
T ret = data[Size - 1]; 에서 data가 더이상 유효하지 않은 데이터가 되는 이유가 궁금합니다
답변 3
1
아 질문 의도를 살짝 착각했네요.
T ret = data[Size - 1];
여기서 Size가 유효한 데이터의 범위 (즉 개수)를 판별하고 있으니
그것을 넘어난 인덱스의 데이터는 유효하지 않다 간주하는 것이죠 (메모리상으로 존재하는 것과 별개로)
1
0
선생님께서 답변해주시기 전에
chatGPT에 물어봤는데
chatGPT
Pop() 함수에서 반환형을 T& 로 지정하려는 것은
해당 함수가 호출된 후에도 stack에서의 해당 요소를 계속적으로 참조할 수 있도록 하려는 의도입니다.
그러나 C#에서는 이를 지원하지 않습니다.
T ret = data[Size - 1]; 에서 ret은 실제로는 data 배열에서 마지막 요소를 복사합니다.
이렇게 복사된 값은 ret 변수에 저장되고, 이후에 Size를 감소시키는 것으로 해당 요소가 stack에서 제거되는 과정을 나타냅니다.
즉, data[Size - 1]은 stack에서 제거된 요소가 아니라 마지막 요소를 나타내는 것이며,
이것을 복사하여 반환하는 것입니다.따라서 반환 형식을 T& 로 설정하는 것은 불가능합니다.
대신에 T로 복사된 값을 반환합니다.
라고 하던데, 이 부분도 맞는 설명일까요??