|
안녕하세요 C++을 공부하는 학생입니다.
WideString의 += 연산자에 대해서 궁금한 것이 있어서 이렇게 질문을 드립니다.
------- 소스 시작 --------------
WideString* pStr1 = new WideString("ABC"); <--- 1번
WideString* pStr2 = new WideString("XYZ");
WideString* pStr3 = pStr1;
*pStr1 += pStr2; <--- 2번
------- 소스 끝 -------------
위의 결과는 ABCXYZ입니다.
그런데 제가 궁금한 것은요 1번 과 2번 에 있는데요
1번일때 pStr1의 주소값이랑 2번 이후의 pStr1의 주소값이 다릅니다.
제가 알기로는 같은 주소상에서 재할당이 되어야 하는게 아닌가 하거든요
1번에서의 pStr1의 주소가 100번지였다면 2번에서의 pStr1의 주소는 200번지입니다.
더더욱 이상한것은 pStr3의 주소도 역시 100번지에서 200번지로 바뀌어 있다는 것입니다.
제가 생각한 것은 pStr1이 원래 가리키던 주소 100번지에 ABCXYZ가 할당되고
이 할당된 영역은 초기에 할당한 영역보다 커서
예약하지 않은(new로 할당하지 않은) 공간까지 잠식하게 되는 것입니다.
그래서 결과적으로 memory aceess 관련 에러가 날 것이라 생각을 했는데
아예 새로운 주소로 가리키고 있다는 것입니다.
---------------------------------------------------------
저렇게 새로운 공간을 가리키게 되면 예전에 가리키고 있던 100번지의 내용은
자동으로 지워지는 지도 궁금합니다.
아시는 분 있으면 꼭 가르쳐 주세요
|