강의

멘토링

커뮤니티

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

박현룡님의 프로필 이미지
박현룡

작성한 질문수

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

15.3 이동 생성자와 이동 대입

질문드립니다.

작성

·

172

1

강의시간 14분38초 부근 내용 질문드립니다.

객체의 소유권을 이전하기 위해서 기존 R-Value refence의

멤버 변수(m_ptr)를 nullptr로 설정을 안하게 되면, 같은 메모리 할당 된 곳을 두번 해제하게 된다고 생각해 반드시 nullptr로 설정이 필요하다고 생각하였으나,

강의 내용에서는 nullptr로 설정하는 것이 선택적인 부분이라는 내용으로 말씀을 하신거 같아..

제가 오해하고 있는 개념이 있는지 질문드립니다.

답변 1

0

홍정모님의 프로필 이미지
홍정모
지식공유자

좋은 질문입니다. R-value로 넘어오는 것들은 보통 '사라질 예정'인 것들이기 때문에 어떤 관점에서는 부가적인 것으로 볼 수도 있습니다. move constructor를 호출한 쪽에서도 move constructor에 parameter로 넣었던 것을 다시 사용하면 안되겠지요. 그러나, 지적하신 대로 '그렇지 않을 경우'도 고려하는 것이 안전하기 때문에 저도 강의에서 '선호한다'라고 표현한 것입니다. 강의 앞부분에서 저는 포인터는 어쨌든 nullptr을 항상 넣는다고 언급한 적이 있습니다. "사용하지 않는 포인터에는 무조건 nullptr을 넣으세요"라고 강의하는 것도 나쁜 방법은 아닙니다만, 저는 학생분들이 더 생각하시기를 바랍니다. 박현룡님은 여기에 대해 정확히 올바른 의문을 갖게 되신 것 같습니다.

원 교재의 아래 항목도 참고하세요.

Move functions should always leave both objects in a well-defined state

https://www.learncpp.com/cpp-tutorial/15-3-move-constructors-and-move-assignment/

  • 그리고 질문은 아주 잘 해주셨는데, 인프런 시스템 특성상 질문을 댓글로 주셔야 제가 조금 더 편합니다.

박현룡님의 프로필 이미지
박현룡

작성한 질문수

질문하기