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

  • 512 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
512
On Slideshare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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