[C++] 타입 변환 3: 포인터 타입 변환
타입 변환 3: 포인터 타입 변환
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
공통 부분
class Item { public: Item() // 기본 생성자 { cout << "Item()" << endl; } Item(const Item& item) // 복사 생성자 { cout << "Item(const Item&)" << endl; } ~Item() // 소멸자 { cout << "~Item()" << endl; } public: int _itemType = 0; int _itemDbld = 0; char _cummy[4096] = {}; // 이런 저런 정보들로 인해 비대해진 아이템 클래스를 나타내기 위해 표시 };
생성자 / new delete 버젼
// Stack [ type(4 byte) dbid(4) dummy(4096) ] 과 같이 영역이 잡혀있다. Item item; // Stack [ 주소(4~8 byte) ] -> Heap 주소[ type(4) dbid(4) dummy(4096) ] Item* item2 = new Item(); TestItem(item); TestItem(*item2); TestItemPtr(&item); TestItemPtr(item2); // 밑의 delete가 없으면 메모리 누수(Memory Leak) -> 점점 가용 메모리가 줄어들어서 Crash delete item2;
생성자 버젼은 자동으로 소멸자를 호출하지만
new로 생성하면 delete를 작성해서 메모리를 해제시켜야 한다.
출력화면

메모리 할당 크기

메모리 크기 | ||
item | 4104 byte | Stack [ type(4 byte) dbid(4) dummy(4096) ] 데이터가 통으로 복사된다. |
item2 | 4 byte | Stack [ 주소(4~8 byte) ] -> Heap 주소[ type(4) dbid(4) dummy(4096) ] 포인터의 사이즈인 4 byte다. 주소값을 넘겨주는 방식이다. |

배열
cout << "--------------------" << endl; // 진짜 아이템이 100개 있는 것 (스택 메모리에 올라와 있다) Item item3[100] = {}; cout << "--------------------" << endl; // 아이템이 100개 있을까요? // 아이템을 가리키는 바구니가 100개. 실제 아이템은 1개도 없을 수도 있음 Item* item4[100] = {};

전체코드
더보기
#include <iostream> using namespace std; // 타입 변환 (포인터) class Item { public: Item() { cout << "Item()" << endl; } Item(const Item& item) { cout << "Item(const Item&)" << endl; } ~Item() { cout << "~Item()" << endl; } public: int _itemType = 0; int _itemDbld = 0; char _cummy[4096] = {}; // 이런 저런 정보들로 인해 비대해진 아이템 클래스를 나타내기 위해 표시 }; void TestItem(Item item) { } void TestItemPtr(Item* item) { } int main() { // 복습 { // Stack [ type(4) dbid(4) dummy(4096) ] Item item; // Stack [ 주소(4~8) ] -> Heap 주소[ type(4) dbid(4) dummy(4096) ] Item* item2 = new Item(); TestItem(item); TestItem(*item2); TestItemPtr(&item); TestItemPtr(item2); // 메모리 누수(Memory Leak) -> 점점 가용 메모리가 줄어들어서 Crash delete item2; } // 배열 { cout << "--------------------" << endl; // 진짜 아이템이 100개 있는 것 (스택 메모리에 올라와 있는) Item item3[100] = {}; cout << "--------------------" << endl; // 아이템이 100개 있을까요? // 아이템을 가리키는 바구니가 100개. 실제 아이템은 1개도 없을 수도 있음 Item* item4[100] = {}; } return 0; }
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 얕은 복사 vs 깊은 복사 1 (0) | 2022.04.09 |
---|---|
[C++] 타입 변환 4: 포인터 (0) | 2022.04.09 |
[C++] 타입 변환 2: 참조 타입 변환 (0) | 2022.04.08 |
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환 (0) | 2022.04.08 |
[C++] 동적 할당: new, delete (0) | 2022.04.07 |
댓글
이 글 공유하기
다른 글
-
[C++] 얕은 복사 vs 깊은 복사 1
[C++] 얕은 복사 vs 깊은 복사 1
2022.04.09 -
[C++] 타입 변환 4: 포인터
[C++] 타입 변환 4: 포인터
2022.04.09 -
[C++] 타입 변환 2: 참조 타입 변환
[C++] 타입 변환 2: 참조 타입 변환
2022.04.08 -
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
2022.04.08
댓글을 사용할 수 없습니다.