동적으로 객체 생성 - new 사용

객체에 대한 포인터 사용하여 객체 사용

명시적으로 객체 삭제 - delete 사용

 

Car *dynCar = new Car;	//동적 객체 생성
dynCar -> speed = 100;	//동적 객체 사용
delete dynCar;		//동적 객체 삭제

 

<예시>

#include <iostream>
#include <string>
using namespace std;

class Car {
public: 
	//멤버 변수 선언
	int speed; //속도
	int gear;	//기어
	string color;	//색상

	//멤버 함수 선언
	void speedUp() {	//속도 증가 멤버 함수
		speed += 10;
	}
	void speedDown() {	//속도 감소 멤버 함수
		speed -= 10;
	}
	void show() {	//상태 출력 멤버 함수
		cout << speed << endl;
		cout << gear << endl;
		cout << color << endl;
	}
};

int main() {
	// 객체 동적 생성
	Car *dynCar = new Car;

	//동적 객체 사용
	dynCar->speed = 100;
	dynCar->gear = 2;
	dynCar->color = "green";
	dynCar->speedUp();
	dynCar->speedDown();
	dynCar->show();

	//객체 동적 삭제
	delete dynCar;

	return 0;
}

 

동적으로 객체를 생성하는 이유에 대해 궁금증이 생겼다. (책에 나오지 않아 구글 검색을 이용)

 

동적으로 객체를 생성하는 경우와 아닌 경우의 차이 : 메모리 영역의 차이

동적으로 객체를 생성할 경우 - 힙 영역

동적으로 객체를 생성하지 않을 경우 - 스택 영역

 

스택 영역 

- 함수내에 정의된 지역 변수가 저장되는 영역(즉, 일반적인 변수가 올라가는 영역)

    cf) 함수는 LIFO(Last In First Out) 형태의 스택 구조를 갖고 있음

- 범위를 벗어날 경우 메모리 자동으로 해제

 

힙 영역 

- 동적할당을 통해 생성된 동적 변수를 관리하기 위한 영역 (동적 변수 : new를 통해 생성되는 변수)

- 직접 해제하기 전까지는 메모리에 유지됨

 

스택 영역의 경우, 컴파일러가 미리 공간을 예측할 수 있기 때문에 함수에서 잠깐 쓰고 자동으로 해제 시키기 위해서는 스택 영역을 사용하는 것이 좋음

동적 변수의 경우 어느정도 할당 될 지 예측할 수 없기 때문에 runtime(즉 프로그램 실행중)에 결정됨. 따라서 프로그램 내에서 해당 변수를 계속 사용하기 위해서는 힙 영역을 사용하는 것이 좋음

 

+ Recent posts