동적으로 객체 생성 - 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(즉 프로그램 실행중)에 결정됨. 따라서 프로그램 내에서 해당 변수를 계속 사용하기 위해서는 힙 영역을 사용하는 것이 좋음
'Computer Science > Programming Language' 카테고리의 다른 글
[JAVA] 메모리 사용 영역(Runtime Data Area) (0) | 2020.07.02 |
---|---|
[C++] 접근자와 설정자 (0) | 2020.06.14 |
[C++] 함수 호출 시 인수 전달 방식 (0) | 2020.06.13 |
[C++] 참조자(reference) (0) | 2020.06.13 |
[C/C++] 동적 메모리 할당(dynamic memory allocation) (0) | 2020.06.12 |