[C++ lab] 6. value,pointer,reference

964 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
964
On SlideShare
0
From Embeds
0
Number of Embeds
102
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

[C++ lab] 6. value,pointer,reference

  1. 1. 6. Value, Pointer, Reference 박민근
  2. 2. Value • 가장 일반적인 객체(값)의 생성 • 생성된 영역의 스택 메모리 공간에 할당 • 생성 영역에서 벗어나면 메모리에서 자동 해제 • 함수안의 지역 변수 -> 함수가 반환되면 메모리 해제 • 클래스 멤버 변수 -> 클래스가 소멸되면 같이 해제 • 전역 변수 -> 프로그램이 종료될 때 해제 함수의 인자나, 배열에 대입할 때, 값의 복사(Copy)가 일어 난다
  3. 3. Value 소멸
  4. 4. Value 복사
  5. 5. Value 복사
  6. 6. Value(값) 복사 partyMember[3] 객체의 멤버 변수 값만 복사 된다 soeun 0 CCharacter 1 CCharacter 2 CCharacter wonHyo jinSang
  7. 7. Value(값) 복사 결과 partyMember[3] soeun 0 CCharacter 1 CCharacter 2 CCharacter wonHyo jinSang 값만 복사(COPY) 했을 뿐, 서로간에 아무런 관계가 없다 서로는 완전히 별개의 객체이다. 총 객체의 개수 = 6개
  8. 8. Value(값) 복사
  9. 9. 복사 생성자 값이 복사될때는 기본 생성자가 아닌, 복사 생성자가 호출 되며, 값이 복사 된다.
  10. 10. Pointer 전역 힙(Heap) 메모리 공간에 동적 생성 영역을 벗어나도 해제 되지 않는다 • 포인터 변수의 실제 값은 할당된 메모리의 시작 주소 • 할당된 메모리를 해제하지 않을 경우, 메모리 누수(Leak)가 발생한다 함수의 인자나, 배열에 대입할 때, 실제 메모리 주소만을 복사한다.
  11. 11. Pointer 실습
  12. 12. Reference(참조) 복사 partyMember[3] 객체의 주소값만 복사된다 pJinWoo 0 CCharacter* 1 CCharacter* 2 CCharacter* pJongChan pYoonSung
  13. 13. Value vs Pointer VS Value Pointer 실제 데이터의 복사 참조 주소를 복사 일반 데이터 타입 포인터 타겟과 원본이 각각 별도의 메모 리 공간을 차지함 타겟과 원본이 같은 메모리 주소 를 참조함 원본이 사라져도 관계 없음 원본 데이터가 사라지면, 포인터 는 모두 무효 포인터가 된다.
  14. 14. 포인터(주소) 복사 partyMember[3] 객체의 주소값만 복사된다 pJinWoo 0 CCharacter* 1 CCharacter* 2 CCharacter* pJongChan pYoonSung 이것들은 전부 바로가기(포인터) 그럼 실제 데이터는 어디 있는가??
  15. 15. 동적 할당 C의 malloc() 과 같음 C C++ 차이 malloc new 클래스, 구조체등의 타입에 맞는 사이즈 자동 할당 생성자를 자동 호출 free delete 소멸자를 자동 호출
  16. 16. 메모리를 가르키는 포인터 메모리를 가르키는 포인터 pJinWoo pJongChan pYoonSung 실제 메모리가 할당된 데이터
  17. 17. 포인터(주소) 복사
  18. 18. 포인터 주의점(1) Player1에 Player2의 주소를 덮어씀 이제 두개의 포인터가 같은 주소를 가르킴 Player1을 해제할 포인터가 없어짐 두 개의 delete가 사실 같은 메모리를 두번 해제하는 버그 발생
  19. 19. 포인터 주의점(2) 포인터 변수의 값(주소)이 복사 되어 지역 변수가 생성된다. 함수내의 지역 변수의 복사가 일어날 뿐이다. 함수에서 벗어나면 사라지는 지역 변수이다. 이 포인터에 저장된 값은 변경되지 않는다 함수내의 로컬 변수가 변경된 것 뿐이기 때문이다.
  20. 20. 레퍼런스 • 존재 하는 객체를 참조(레퍼런스) 한다. • 포인터와 달리 항상 존재하는 값만을 참조한다. (NULL이 될 수 없다) • 이미 존재하는 값을 복사가 아닌 참조하는 것으로, 별명(Alias)라고도 한다 • 새롭게 할당하거나 복사하지 않는다.
  21. 21. Value <-> Pointer • Value 변수 앞에 & : 주소값을 반환. Value -> Pointer • 포인터 변수 앞에 * : 포인터에 저장된 값을 반환. Pointer -> Value

×