
수명(Lifetime)
객체의 수명은 객체가 메모리에 머무는 시간을 의미합니다. 수명은 이른바 저장 기간에 의해 결정됩니다. 다양한 종류의 저장 기간이 있습니다.
자동 저장 기간(Automatic Storage Duration)

자동 저장 기간은 객체에 대한 메모리가 블록의 시작 부분에서 자동으로 할당되고 코드 블록이 끝날 때 해제되는 기간입니다. 이를 스택 메모리라고도 합니다. 객체는 스택에 할당됩니다. 이 경우, 객체의 수명은 해당 객체의 범위에 의해 결정됩니다. 모든 지역 객체는 이 저장 기간을 갖습니다.
동적 저장 기간(Dynamic Storage Duration)
동적 저장 기간은 객체에 대한 메모리가 수동으로 할당되고 수동으로 해제되는 기간입니다. 이러한 저장 기간은 종종 힙 메모리라고 합니다. 사용자는 객체에 대한 메모리가 할당되고 해제될 시기를 결정합니다. 객체의 수명은 객체가 정의된 범위에 의해 결정되지 않습니다. 우리는 이를 operator new와 스마트 포인터를 통해 수행합니다. 현대적인 C++에서는 operator new보다는 스마트 포인터 기능을 선호해야 합니다.
정적 저장 기간(Static Storage Duration)
객체 선언이 정적 지정자와 함께 사용되면 정적 객체의 저장 공간은 프로그램이 시작될 때 할당되고 프로그램이 끝날 때 해제됩니다. 이러한 객체는 하나의 인스턴스만 존재하며 (일부 예외를 제외하고) 프로그램이 종료될 때 수명이 끝납니다. 이러한 객체들은 프로그램 실행 중 언제든지 접근할 수 있는 객체입니다. 책의 후반부에서는 정적 지정자와 정적 초기화에 대해 다룰 예정입니다.
new와 delete 연산자
객체에 대한 메모리를 동적으로 할당하고 해제할 수 있으며 포인터를 이 새로 할당된 메모리를 가리킬 수 있습니다. operator new는 객체를 위한 공간을 할당합니다. 객체는 자유 저장소인 힙 또는 힙 메모리에 할당됩니다. 할당된 메모리는 operator delete를 사용하여 해제해야 합니다. 이는 이전에 operator new로 할당된 메모리를 해제합니다.
#include <iostream>
int main()
{
int* p = new int;
*p = 123;
std::cout << "The pointed-to value is: " << *p;
delete p;
}
//The pointed-to value is: 123
위 예제는 정수 하나를 자유 저장소에 위한 공간으로 할당합니다. 포인터 p는 이 정수를 위해 새롭게 할당된 메모리를 가리킵니다. 이제 포인터를 역참조하여 새롭게 할당된 정수 객체에 값을 할당할 수 있습니다. 마지막으로, operator delete를 호출하여 메모리를 해제합니다.
'IT > C++' 카테고리의 다른 글
| C++ 코드 구성(헤더 파일과 소스 파일) (0) | 2023.06.01 |
|---|---|
| C++ Automatic Type Deduction (auto) (0) | 2023.05.30 |
| C++ Strings(c_str() / Substrings) (0) | 2023.05.29 |
| C++ References 정리 (0) | 2023.05.28 |
| C++이란? (0) | 2023.05.27 |
댓글