• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[9.38] Student 클래스 value의 벡터 질문

22.06.12 10:50 작성 조회수 120

0

1.Student 값의 벡터니까 registerStudent를 할 때 student_input을 가지고 와서 push_back을 할 때 복사해서 넣게 된다는데 왜 복사해서 넣는건가요?

&로 student_input을 하니까 서로 같은 메모리를 참조하게 해서 student[0]에 들어가져야 되는게 아닌가해서요

 

2. vector<Student*> students에서 Studnet*가 가리키고 있는 원래 주소의 것은 남아있다는데 그 부분이 무슨 이야기인지 잘 이해가 안 돼요 조금 더 자세히 설명해 주실 수 있으신가요?

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.06.13

안녕하세요 :)

 

1. 

벡터 멤버 변수에 인자가 call by reference가 아닌 call by value로 복사됩니다.

(인자가 참조형인가 아닌가와는 별개로 push_back이 이루어질 때의 이야기입니다)

 

즉, 아래와 같이 코드를 작성했다고 했을 때

 

lec1.registerStudent(std1);

lec2.registerStudent(std1);

내부적으로 

lec1.students[0] / std1, lec2.students[0] / std1 는 별개의 존재가 됩니다.

(std1이 복사된 값을 갖게 됩니다)

(강의에서 설명하듯) 그렇기 때문에 students[0]과 student_input의 주소는 그래서 다른 것입니다.

즉, lect1.students[0]와 lect2.students[0]는 call by value로 복사된 

'같은 값을 가질 뿐' 동일한 메모리 주소를 참조하고 있지 않습니다.

 

 

2. 

vector<Student*> students는 

Lecture 클래스의 인스턴스가 사라지면 덩달아 삭제됩니다.

하지만 students가 사라지더라도

가리키고 있는 대상 (vector<Student*>)은 여전히 유지된다는 이야기입니다.

 

감사합니다.