2014년 6월 11일 수요일

[미완] CArray에서 GetAt와 ElementAt 차이

[미완] CArray에서 GetAt와 ElementAt 차이

GetAt는 복사본이 넘어오고
ElementAt는 포인트가 넘어온다.
즉 GetAt로 받은 변수의 값을 변경해도 원본은 그대로다.
CArray의 값을 변경하고 싶은면 ElementAt 사용

/////////////////////////////////////////
의문점
VS 2008로 테스트를 해봤는데

struct  stTemp
{
CString str1;
CString str2;
} ;

CArray<stTemp, stTemp> a;

stTemp sTemp1;
sTemp1.str1 = _T("1");
sTemp1.str2 = _T("1");

stTemp sTemp2;
sTemp2.str1 = _T("2");
sTemp2.str2 = _T("2");

a.Add(sTemp1);
a.Add(sTemp2);

// 입력값 확인
for ( int i = 0; i < a.GetSize(); i++ )
{
CString a1 = a.GetAt(i).str1;
CString a2 = a.GetAt(i).str2;
}

// 입력값 변경
a.GetAt(0).str1 = _T("1 1");
a.GetAt(0).str2 = _T("2 2");

a.ElementAt(1).str1 = _T("akjfaklf");
a.ElementAt(1).str2 = _T("12312414");

// 변경된 값 확인
for ( int i = 0; i < a.GetSize(); i++ )
{
CString a1 = a.GetAt(i).str1;
CString a2 = a.GetAt(i).str2;
}

GetAt도 원본 값이 바뀐다;; 당황

댓글 없음:

댓글 쓰기