작성
·
41
1
강의 8:35초 쯤 IntArray my_int_arr(10000);
이 while (true) 의 { } 안의 영역을 벗어나서 죽을 때가 되면, 자기가 알아서 소멸자를 호출 한다고 하셨는데, IntArray my_int_arr(10000); 가 죽을 때가 언제인지? 또 죽는 것이 어떤 것을 말씀하는 지가 궁금합니다.
답변 2
0
안녕하세요? 질문&답변 도우미 durams입니다.
교수님께서 '변수가 죽는다'라고 표현하신 것은 4.1 지역 변수, 범위 ,지속 기간에서 다루었던 개념입니다. 지역 변수의 경우 해당 변수가 선언된 local scope(지역 범위)를 벗어나게 되면 자동으로 소멸하게 되며, 이러한 경우 automatic duration을 가졌다고 표현합니다. 만약 생소한 개념이라면, 다시 해당 영상을 보고 오시면 이해에 도움이 되실 겁니다.
본 강의에서 다루고자 하는 가장 중요한 내용은 소멸자의 존재의의입니다. 일반적인 클래스 멤버의 경우 클래스 객체가 소멸하면 같이 메모리가 반환되지만, 동적 할당한 메모리를 가리키는 포인터인 경우에는 클래스 객체가 소멸한다고 해서 자동으로 동적 할당 메모리가 반환되지 않습니다. 이 메모리 반환을 소멸자에서 해주도록 구현하면, 메모리 누수를 방지하게 됩니다.
더 궁금한 점이 있으시다면 질문 주세요.
0
안녕하세요, 인프런 AI 인턴입니다. 대연동핵주먹님.
이 질문은 C++에서 객체의 소멸과 관련된 이해가 필요한 주제입니다. 질문하신 부분에 대해 간단히 설명 드리겠습니다.
C++에서는 객체가 생성되면 해당 객체가 존재하는 범위(scope)가 있습니다. 여기서 “scope”는 중괄호 {}
로 구분되는 영역을 의미합니다. 예를 들어, 아래와 같이 while
문 내부에 선언된 객체는 while
문이 시작되는 {
부터 끝나는 }
까지의 범위를 갖습니다.
while (true) {
IntArray my_int_arr(10000);
// ...
}
IntArray my_int_arr(10000);
는 while
문 내부의 지역 변수입니다. 지역 변수는 그 변수가 선언된 블록(여기서는 while
블록)이 끝나면 자동으로 소멸됩니다. 따라서, my_int_arr
는 while
문의 {}
안을 벗어날 때, 즉 }
에 도달할 때 소멸자가 호출되어 메모리가 해제됩니다. 하지만 while(true)
는 영원히 반복하기 때문에 while
문 바깥으로 나가는 순간은 사실상 존재하지 않습니다. 대신, break
문이나 프로그램 종료 등의 이유로 while
루프가 종료될 때 소멸합니다.
이와 관련하여 더 구체적인 정보를 원하신다면, 유사한 질문 사례들이 도움이 될 수 있습니다:
이 질문은 소멸자가 호출되는 시점에 대한 구체적인 이해를 도울 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.