객체 생성 두 가지 방법

sz L·2023년 3월 27일
2

C++

목록 보기
18/40
post-thumbnail

객체 생성 두 가지 방법

1. stack영역 생성

2. heap영역 생성


stack 영역 객체 생성

스택 영역은 함수의 매개변수와 지역변수가 할당되는 영역으로 함수 호출 시 스택에 할당되며 함수 종료 시 자동으로 소멸한다

heap 영역 객체 생성

'new' 키워드를 사용하여 동적으로 힙 영역에 메모리를 할당한다.
따라서 'delete'하기 전까지 heap에 존재하게 된다.
그래서 동적메모리 해제를 하지않으면 소멸자가 호출되지 않음


#include <iostream>

using namespace std;

class Orange
{
private:
	int price;

public:
	Orange(int price)
	{
		this->price = price;
		cout << "[생성자] 오렌지 가격 : " << price << endl;
	}

	~Orange()
	{
		cout << "[소멸자]" << endl;
	}

	void ShowPrice()
	{
		cout << "[가격] 오렌지 : " << price << endl;
	}
};

void stack()
{
	cout << "*** stack Orange orange(500); ***" << endl;
	Orange orange(500); // stack영역
	orange.ShowPrice();
}

void heap()
{
	cout << "*** heap Orange *orange = new Orange(1000); ***" << endl;
	Orange* orange = new Orange(1000); // heap 영역
	orange->ShowPrice();
}

int main(void)
{
	stack();

	heap();

	return 0;
}


#include <iostream>

using namespace std;

class Orange
{
private:
	int price;

public:
	Orange(int price)
	{
		this->price = price;
		cout << "[생성자] 오렌지 가격 : " << price << endl;
	}

	~Orange()
	{
		cout << "[소멸자]" << endl;
	}

	void ShowPrice()
	{
		cout << "[가격] 오렌지 : " << price << endl;
	}
};

void stack()
{
	cout << "*** stack Orange orange(500); ***" << endl;
	Orange orange(500); // stack영역
	orange.ShowPrice();
}

void heap()
{
	cout << "*** heap Orange *orange = new Orange(1000); ***" << endl;
	Orange* orange = new Orange(1000); // heap 영역
	orange->ShowPrice();

	delete orange;
}

int main(void)
{
	stack();

	heap();

	return 0;
}

heap() 함수 내에서 Orange *orange = new Orange(1000);new Orange(1000);을 통해서 heap영역에 메모리를 할당하고 그 메모리의 주소를 포인터 연산자를 통해 orange에 저장한다. 이때, orangestack영역에 할당된 변수이기 때문에 heap()함수가 종료가 된다면 orange라는 변수는 자동으로 소멸하고 heap영역에 할당받은 메모리만 남게되니까 heap()함수 안에서 delete를 해줘야한다.

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글