타입변환-2⭐

jinsuk·2023년 10월 23일
0
  • 윗 버전은 메모리 영역에 잡혀있고 아랫 버전은 주소를 가리키는 바구니만 있고 실제 원본 데이터는 힙영역에 있다.
  • 브레이크포인트를 걸어 시험해보면 윗버전은 생성자와 소멸자를 호출해주지만 아랫 버전은 실제 데이터가 저장이 된게 아닌 주소값이라는 정수가 저장된 것에 불과하기 때문에 생성자는 호출되지만(new와 동시에 생성자 호출) 소멸자는 호출되지 않는다.
  • 함수 2개(인자로 그냥 아이템을 받는 버전, 아이템의 포인터를 받아주는 버전)
  • 아이템을 건네줄 수도 있고, 아이템2라는건 포인터 형태였으니까 실질적으로 원본 데이터에 접근을 해서 그 아이를 넘겨줄 수 도 있다.
  • 마찬가지로 아래버전의 함수를 사용하고싶다면, 주소값을 넘겨줘야 하니까 아이템의 주소값을 넘겨줄 수도 있고, 두번째는 아이템2자체가 포인터다 보니까 그냥 아이템2를 넘겨줄 수도 있다.
  • 굉장히 헷갈리지만 이게 c++의 포인터 문법이다.
  • 사실 이 완전히 다른 얘기가 되는데 윗 버전 같은 경우 데이터가 복사되는 개념이다, 근데 복사라고 하니까 임시땜빵 같은 느낌이지만 사실 얘도 객체는 객체다, 따라서 생성자가 호출이 돼서 만들어지고 소멸될때 마찬가지로 소멸자를 호출하게 된다.
  • item은 뚱뚱한 데이터라서 함수인자로 복사해서 넘겨주게 되면 4000바이트가 통으로 복사되어 넘어가기 때문에 굉장히 부담이됨으로 주의깊게 봐야함
  • 윗버전은 스택메모리에 아이템 100개가 올라와 있음
  • 아랫버전은 아이템을 가리키는 바구니가 100개있다는 얘기임, 동적할당을 이용해 아이템을 만들어 주지않았기 때문에 실제 아이템은 1개도 없을 수 도 있음.
  • 별표가 붙었는지의 유무에 따라 실제로 객체 자체가 메모리를 뚱뚱하게 차지할 수도 있고 아니면 저 멀리 어딘가에 원격에다가 가리키고 있을수도있고 실제 데이터가 있다는 보장은 없다.
profile
공부기록용

0개의 댓글