C# 7.0 참조 로컬 및 참조 반환
@Patrick Smacchia 님이 작성하신 내용입니다.
C# 7.0은 ref키워드의 사용을 확장했습니다. 지역 변수는 관리되는 포인터가 될 수 있으며 아래 예제에 설명되어 있습니다.
using System.Diagnostics;
int i = 6;
ref int j = ref i;
j = 7;
Debug.Assert(i == 7);
또한 메서드는 관리되는 포인터를 반환할 수 있습니다.
ref int i = ref GetRef();
static ref int GetRef() {
int[] arr = new int[6];
return ref arr[2];
}
이 예는 사소하지 않습니다. 먼저 배열이 힙에 할당되고 배열 GetRef()을 빌드하는 메서드보다 오래 지속된다는 점에 주목하십시오.
따라서 요소 중 하나에 대한 내부 포인터를 반환하는 것이 좋습니다.
둘째, 반환된 내부 포인터는 배열의 유일한 GC 루트입니다. 그러나 내부 포인터에서 배열 참조를 얻을 수 있는 방법이 없기 때문에 메서드가 반환되면 배열 자체에 도달할 수 없게 됩니다!
아래에서 원본 글을 확인하실 수 있습니다.
읽어주셔서 감사합니다.