class Person { int age; public: Person(int age) { this->age = age; cout << "생성자 호출 / 나이 :" << age << endl; } ~Person() { cout << "소멸자 호출" << endl; } void GetAge() { cout << "나이는 : " << age << "입니다." << endl; } }; void Test01() { // 해당 함수 내에서만 메모리 유지 Person person01(15); person01.GetAge(); }; void Test02() { // 클래스 동적 할당 : delete 하기 전까지 계속 메모리 유지 Person *person02 = new Person(30); person02->GetAge(); //delete person02; }; int main(){ Test01(); Test02(); return 0; }
생성자 호출 / 나이 :15
나이는 : 15입니다.
소멸자 호출
생성자 호출 / 나이 :30
나이는 : 30입니다.
2. 스택메모리 사용
- Person person01(15);
함수에만 쓰고 자동으로 해제시키기 위해 스택메모리에 올려둔 것.
해당 함수에서 벗어나면 자동으로 메모리가 해제.
3. 힙메모리 사용
Person *person02 = new Person(30);
이 방법은 계속해서 객체를 사용하기 위해 힙 영역의 메모리에 올립니다.
이때는 직접 delete로 해제해주기 전까지는 메모리가 해제되지 않기때문에 함수 밖에서도 메모리가 유지.
이 방법은 메모리 누수가 발생할 수 있기 때문에 꼭 delete로 메모리를 해제해주어야 합니다.
4. 스택 메모리 VS 힙 메모리
- 스택 메모리 : 함수내에 정의된 지역 변수가 저장되는 영역
( 함수는 LIFO(Last In First Out)의 형태를 가진 스택 구조를 가지고 있음 )- 힙 메모리 : 동적할당을 통해 생성된 동적 변수를 관리하기 위한 영역
( new를 통해 생성되는 변수 )
스택 영역의 경우 컴파일러가 미리 공간을 예측할 수 있지만, 동적 변수의 경우 어느 정도 할당 될 지 예측할 수 없기 때문에 런타임(프로그램 실행중)에 결정됩니다.