객체 수명
객체가 생성되고 소멸되는 시점 알아보기
객체 수명은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
객체가 생성되는 시점
객체의 수명은 저장 공간이 할당되고 생성자가 실행을 마친 뒤 시작됩니다. 그 시점부터 객체를 완전히 사용할 수 있습니다.
#include <iostream>
struct Widget {
Widget() { std::cout << "born\n"; }
};
int main() {
Widget w; // constructor runs here
}객체가 소멸하는 시점
수명은 소멸자가 실행될 때 끝납니다. 스택 객체의 경우에는 해당 범위를 닫는 중괄호에 도달했을 때 수명이 끝납니다.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget w;
std::cout << "alive\n";
} // ~Widget runs here생성과 소멸의 순서
객체는 생성된 역순으로 소멸합니다. 마지막에 생성된 객체가 가장 먼저 해제됩니다.
#include <iostream>
struct Tag {
int id;
Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
~Tag() { std::cout << "drop " << id << "\n"; }
};
int main() {
Tag a(1);
Tag b(2); // dropped before a
}자동 수명(스택 수명)
자동 객체는 자신을 감싸는 블록이 유지되는 동안 존재합니다. 가장 일반적이고 안전한 수명 모델입니다.
동적 수명(힙 수명)
new로 생성한 힙 객체는 delete가 호출될 때까지 존재합니다. 이 객체의 수명은 범위가 아니라 사용자가 관리합니다.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget* w = new Widget();
std::cout << "still alive\n";
delete w; // destructor runs here
}정적 수명
static 저장 공간을 사용하는 객체는 프로그램 전체가 실행되는 동안 존재합니다. 함수 내부의 정적 객체는 처음 사용될 때 한 번 생성됩니다.
#include <iostream>
int next() {
static int counter = 0; // built once
return ++counter;
}
int main() {
std::cout << next() << next() << next() << "\n";
}임시 객체
표현식에서 생성된 임시 객체는 일반적으로 전체 표현식이 끝나는 시점(세미콜론)에 소멸합니다.
#include <iostream>
#include <string>
int main() {
std::cout << (std::string("a") + "b") << "\n";
} // temporary string dies after this line멤버는 본문보다 먼저 생성됩니다
클래스의 멤버 객체는 이를 포함하는 객체의 생성자 본문이 실행되기 전에 생성되고, 그 객체의 소멸자 본문이 실행된 후 소멸합니다.
#include <iostream>
#include <string>
struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
Engine e;
Car() { std::cout << "car\n"; }
};
int main() { Car c; }상수 참조로 수명 연장하기
임시 객체를 const&에 연결하면 참조와 같은 기간까지 수명이 연장됩니다. 유용한 C++ 규칙입니다.
#include <iostream>
#include <string>
int main() {
const std::string& s = std::string("hi");
std::cout << s << "\n"; // s still valid
}수명 종료 후 사용
수명이 끝난 객체에 접근하는 것은 정의되지 않은 동작입니다. 전형적인 댕글링 참조 또는 해제 후 사용 버그입니다.
수명이 RAII를 이끕니다
소멸자는 수명이 끝날 때 결정적으로 실행되므로 C++는 리소스 정리를 수명에 연결합니다. 이것이 다음 강좌에서 다룰 RAII의 토대입니다.
빠른 확인
객체 수명에 대한 이해도를 확인해 보십시오.
복습
객체의 수명은 생성이 끝난 뒤 시작되고 소멸과 함께 끝난다는 것을 배웠습니다. 자동 객체는 범위를 따르고, 동적 객체는 new/delete를 따르며, 정적 객체는 프로그램 전체 동안 유지됩니다. 소멸은 역순으로 이루어지며, 이것이 RAII의 기반입니다.
자주 묻는 질문
“객체 수명” 강의는 무료인가요?
네 — “객체 수명” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“객체 수명”에서 뭘 배우나요?
객체가 생성되고 소멸되는 시점 알아보기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“객체 수명” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.