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

롤로노이님의 프로필 이미지
롤로노이

작성한 질문수

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

얕은 복사 vs 깊은 복사 #2

깊은 복사 방식을 이용하여 복사 넘기기 할때 이런식으로 참조값을 사용해서 넘겨도 heep 메모리 영역에 정상적으로 생성 되나요?

작성

·

202

0

일단 new 문법으로 heep 영역의 동적 할당을 할때

기본적으로 void* 주소값을 넘겨주는것으로 알고 있습니다

 

하지만 이것을 명시적으로? 예를들어 클레스가 하나 있다고 가정했을때 

class Plyear 라는 클래스를 생성할때 

Plyear plyear = new  Plyear() 이런식으로 동적 할당역역을 사용하고 delete 문법을 사용하여 메모리를 

delete plyear; 이렇게 하여 초기화 시키는걸로 알고 있습니다

 

여기서 전 & 타입으로 해보고 싶어서 이런식으로 바꿔봤습니다

클레스는 위와 동일하다 가정하고

Plyear &plyear = *new  Plyear() 이런식으로 만들어 봤는데 여기서 한가지 의문이 들었습니다. 정상적으로 잘 만들어지긴 하는데 주소값을 입력 하면 깊은 복사로 만들었을때 복사 방식을 분명 제대로 줬음에도 불구 하고 heep 영역에 잡히는게 맞는지 이걸 확인할 방법이 보이지가 않아서 어떻게 확인할수 있는지 보다도 정확하게 만든게 맞는지 그게 궁금 합니다 ㅠㅠ

 

실제 코드는 아래와 같습니다 

#include <iostream>

using namespace std;

#define out

class Pet

{

public:

Pet ()

{

cout<< "Pet ()"<< endl;

}

Pet (const Pet& pet)

{

cout<< "Pet (const Pet& pet)"<< endl;

}

Pet& operator=(const Pet& pet)

{

cout<< "operator=(const Pet& pet)"<< endl;

return *this;

}

virtual ~Pet ()

{

cout<< "~Pet ()"<< endl;

}

public:

int Pet_hp=50;

};

class Plyear

{

public:

Plyear ()

{

cout<< "Plyear ()"<< endl;

}

 

Plyear (const Plyear& plyear)

{

cout<< "Plyear (const Plyear& plyear)"<< endl;

}

 

Plyear& operator=(const Plyear& plyear)

{

cout<< "operator=(const Plyear& plyear)"<< endl;

_level=plyear._level;

return *this;

}

 

virtual ~Plyear ()

{

cout<< "~Plyear ()"<< endl;

}

 

public:

int _level=0;

};

 

class Knight: public Plyear

{

public:

Knight ()

{

cout<< "Knight ()"<< endl;

}

Knight (const Knight& kinght): Plyear(kinght) ,_pet2(*new Pet(kinght._pet2)) ,_hp(kinght._hp)

{

cout<< "Knight (const Knight& kinght)"<< endl;

}

Knight& operator=(const Knight& kinght)

{

cout<< "operator=(const Knight& kinght)"<< endl;

Plyear::operator=(kinght);

_pet2=*new Pet(kinght._pet2);

_hp=kinght._hp;

return *this;

}

virtual ~Knight ()

{

cout<< "~Knight ()"<< endl;

delete &_pet2;

}

 

public:

int _hp=0;

Pet& _pet2=*new Pet();

};

 

 

int main ()

{

Knight knight;

knight._hp=100;

knight._level = 99;

cout<<"----------------------------------"<<endl;

Knight knight2;

knight2=knight;

knight2._pet2.Pet_hp=10;

cout<<"----------------------------------"<<endl;

cout<<"knight1.Pet_hp:"<< knight._pet2.Pet_hp <<endl;

cout<<"knight2.Pet_hp:"<< knight2._pet2.Pet_hp <<endl;

return 0;

}

 

깊은복사를 이용하여 pet 부분만 새로운 객채를 생성하는 그런걸 응용해봤는데 이게 정상적으로 heep 영역에 메모리가 할당 되는지 그게 궁금한대 도저히 어떻게 확인할수 있는방법이 보이지 않습니다 ㅠㅠ 제가 좀 이상한건지 아니면 결벽증이 있는건지는 모르겠지만 heep 영역에 정상적으로 메모리가 할당 되었던건지 알려주시면 감사하겠습니다 

답변 2

0

롤로노이님의 프로필 이미지
롤로노이
질문자

일단은 힙에 정상적으로 들어갔다는거군요 감사합니다 할수있는 모든응용방법을 다 해보면서 이해하는중이라 괴랄한 방식이 좀 많이 나오는듯 하네요 ^&^

0

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

메모리 창에서 &player해서 뜨는게 힙 영역이고 player 영역입니다.
그러나 Player& player = *(new Player); 이렇게 사용하는건 
살짝 괴랄한 방식이고 본 적이 없습니다.

롤로노이님의 프로필 이미지
롤로노이

작성한 질문수

질문하기