깊은 복사 방식을 이용하여 복사 넘기기 할때 이런식으로 참조값을 사용해서 넘겨도 heep 메모리 영역에 정상적으로 생성 되나요?
314
17 asked
일단 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 영역에 정상적으로 메모리가 할당 되었던건지 알려주시면 감사하겠습니다
Answer 2
0
메모리 창에서 &player해서 뜨는게 힙 영역이고 player 영역입니다.
그러나 Player& player = *(new Player); 이렇게 사용하는건
살짝 괴랄한 방식이고 본 적이 없습니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
541
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
441
1
strcpy() 구현 관련 질문
0
513
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
452
1
클래스 타입의 포인터 질문합니다
0
546
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
497
1
템플릿 특수화 관련 질문
0
384
1
포인터 관련 질문합니다!
0
263
1
Unable to start assembler. Check your settings.
0
829
2
cpu선택
0
539
1
포인터 질문이 있습니다
0
322
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
584
1
iterator 삭제관련
0
406
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
310
1
15 분 45초 대 질문
0
308
0
스택 프레임 질문합니다!
2
306
1
오른값 참조 in 게임
0
384
0
동적할당 질문이 있습니다
0
449
1
안녕하세요 메모리에 대해 질문드립니다.
0
304
1
함수객체 의 매개변수
0
358
1
복사생성자
0
434
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
419
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
353
1
스택 오버플로우
2
790
1

