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