강의

멘토링

커뮤니티

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

TaeChoon Park님의 프로필 이미지
TaeChoon Park

작성한 질문수

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

15.3 이동 생성자와 이동 대입

14:30 really necessary?

작성

·

237

2

14:30 경에 교수님은 Autoptr(Autoptr &&a)

Autoptr & operator=(Autoptr&&a)

에서

a.m_ptr 이really necessary 한지 여부를 따지고 계신데요, 

교수님의 결론은 굳이 안써줘도 된다 였습니다.

그런데 저는 이해가 안됍니다 .

a.m_ptr=null ptr; 이없다면 , 소유권이전이 안돼는 (move semantics가 안돼는) 것 아닌가 싶네요 .

따라서 main.cpp에서 generateResource() 가 종료되며 Autoptr res 객체가 소멸되며 ~Autoptr이 작동해 (a.)m_ptr이 해제되어 프로그램의 출력결과도 

Autoptr default constructor

Resource length constructed

Autroptr default constructor

Autoptr move assignment

Resource destructed

Autoptr destructor 

에러 ( 이미 지운메모리 영역을 다시 지우려함 ) 

위와 같이 되야하는것 아닌가 싶네요 .

또한 위의 질문과는 별개로  ,

Autoptr(Autoptr &&a)

Autoptr & operator=(Autoptr&&a) 을 구현할때 왜 굳이 

R-Value reference (&&)을 사용하신건지 궁금합니다.

l-value reference(&) 와 r-value refernce 가 분명히 정의상 차이는 있다만 여기서는 굳이 기능상 차이가 있나 싶거든요. 

그냥 l-value reference(&) 로 받아

Autoptr(Autoptr &a)

Autoptr & operator=(Autoptr&a)

으로 했어도 결과는 똑같은것 같은데 ... 어떻게 생각하시나요?  

답변 2

3

1. 강의에서 nullptr을 넣을 것을 권장하고 있는데 실제로 빼면 문제가 발생하네요. 이유는 생각하시는 것이 맞습니다.

2. 결과는 똑같습니다. 그렇지만 그런 관점이 아닌 copy와 move에 대해서 생각해보시고, 컴파일러가 둘의 오버로딩을 구분해준다는 점을 알고 계셨으면 좋겠네요.

2

TaeChoon Park님의 프로필 이미지
TaeChoon Park
질문자

감사합니다^^

TaeChoon Park님의 프로필 이미지
TaeChoon Park

작성한 질문수

질문하기