인프런 커뮤니티 질문&답변
7분쯤에 질문이있습니다
작성
·
222
2
7분쯤에 선생님이 이런식으로 코딩을 해주셨는데
Mystring hello("Hello");
cout<<(int*)hello.m_data<<endl;
{
MyString copy=hello;
cout<<(int*)copy.m_data<<endl;
}
여기서 output 둘다 006AF320 로 같게 나오는데 m data 가 가지고 있는 값이 같다는건가요 아니면 m data 포인터의 주소값이 같다는 뜻인가요?
답변 1
4
m_data 이 가지고 있는 값이 같다는 뜻입니다. (m_data 는 포인터이므로 얘가 가지고 있는 값이 같다는 뜻으로 말씀드립니다.) cout 은 char * 를 받으면 char * 의 값인 주소값을 출력하지 않고 char * 가 가리키는 내용인 문자열을 출력하도록 설계가 되어있습니다. 그래서 char * 포인터가 가진 주소값 그대로를 출력하기 위하여 (int*) 로 형변환하시고 주소값을 그대로 출력해서 보여주신 경우입니다. 두 주소값(두 m_data 값)이 같으니 copy 객체의 m_data 와 hello 객체의 m_data 가 동일한 메모리를 가리키고 있다는거에요! 이런 현상이 발생하는 이유는 5분 정도에서 설명해주시는데, 질문 주신 7분과 같은 결과가 나올 시점에선 교수님께서 복사생성자를 구현 안하셨기 때문에(주석 처리 해두셨어요) 컴파일러가 만들어준 기본 복사생성자를 호출하게 되는데 얘는 그냥 멤버들을 단순 복사를 하기 때문입니다.! 따라서 copy 의 m_data 가 hello_ 의 m_data 값을 복사받으면서 두 m_data 가 같은 주소, 즉 동일한 메모리 공간을 가리키게 된 상태입니다.





