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

여현이님의 프로필 이미지
여현이

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

얕은 복사 vs 깊은 복사 #1

깊은복사

작성

·

148

1

마지막 깊은 복사 부근에서
public:
Knight()
{
_pet = new Pet();
}
Knight(const Knight& knight)
{
_hp = knight._hp;
_pet = new Pet(*(knight._pet)); // 깊은 복사
}
~Knight()
{
delete _pet;
}
Knight& operator=(const Knight& knight)
{
delete _pet; // <- 이부분
_hp = knight._hp;
_pet = new Pet(*(knight._pet));
return *this;
}
 
Knight k;
Knight k1;
k1 = k;
이렇게 하게되면 k1이 만들어지면서 Pet하나가 동적할당 되고
다시 대입 연산자로 k1 = k 에서 Pet하나가 더 동적할당이 되는데
위처럼 대입연산자 구현부에서 시작 시 원래 할당되있던 아이를
해제해주고 다시 동적할당 해주면 메모리 누수가 일어나지 않게 되는게 맞나요?

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 그렇습니다.
메모리 누수가 일어나는지 궁금하면, 실험해보는게 가장 확실한데요.

while (true)
{
Knight k;
Knight k1;
k1 = k;
}

를 해서 프로그램이 죽지 않으면 누수가  없는겁니다!

여현이님의 프로필 이미지
여현이
질문자

아 while문을 돌려서 확인하는 방법이 있군요 ㅎㅎ 감사합니다

여현이님의 프로필 이미지
여현이

작성한 질문수

질문하기