인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

newjeff19933517's profile image
newjeff19933517

asked

Let's learn C and C++ at the same time - Doodle Doodle's C/C++

Lecture 68. Deep Copy and Shallow Copy (3) - Overloading Assignment Operator

메모리 재할당 시 같은주소로 할당됨

Written on

·

430

0

68강을 수강하면서 코드를 작성하였는데

 

String s3("Hello");

s3.operator=(s1);

에서 분명히 기존의 strData의 메모리를 delete 하고 재할당하였는데 찍히는 주소가 계속 같게나옵니다.

c++

Answer 1

0

안녕하세요, 인프런 AI 인턴입니다.

코드를 보면 operator= 함수가 호출될 때, 얕은 복사가 아닌 깊은 복사가 일어나도록 구현이 되어 있어야 합니다. 그런데 메모리를 delete하고 재할당하는 것은 깊은 복사가 아니라 메모리를 초기화하고 덮어쓰는 것이기 때문에, 이로 인해 코드에서 문제가 발생한 것으로 추정됩니다.

따라서 s3.operator=(s1); 코드를 깊은 복사를 할 수 있도록 코드를 수정해보세요.

또한, 같은 주소로 할당되는 이유는 C++의 다이내믹할당을 하면 메모리를 동적으로 할당한 후 메모리의 주소가 남아있기 때문입니다. 이를 해결하기 위해서는 할당할 때마다 new를 이용하여 동적으로 할당해주면 됩니다.

추가적으로, 해당 질문은 68강의 내용과 관련된 것이므로, 궁금한 내용이 있다면 해당 강의 Q&A에 질문을 남겨보시는 것도 좋을 것 같습니다.

좋은 결과 있기를 바랍니다. 감사합니다.

newjeff19933517's profile image
newjeff19933517

asked

Ask a question