강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

SH님의 프로필 이미지
SH

작성한 질문수

홍정모의 따라하며 배우는 C++

10.3 집합 관계

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

작성

·

226

0

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

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

 

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

답변 1

0

안녕하세요 :)

 

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*>)은 여전히 유지된다는 이야기입니다.

 

감사합니다.

SH님의 프로필 이미지
SH

작성한 질문수

질문하기