-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
[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*가 가리키고 있는 원래 주소의 것은 남아있다는데 그 부분이 무슨 이야기인지 잘 이해가 안 돼요 조금 더 자세히 설명해 주실 수 있으신가요?
답변을 작성해보세요.
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*>)은 여전히 유지된다는 이야기입니다.
감사합니다.
답변 1