2013-02-09 3 views
0

좋아요. 그래서 저는 C++을 처음 접했습니다. Java 배경이 있지만 C++로는 이제 내 자신의 가비지 수집을해야한다는 것을 알고 있습니다. 끝없는 while 루프 종료

int main(){ 
float * pt; 
while(true){ 
// some code 
} 
delete pt; 
return 0; 

는 루프가 다음 창에 닫기 버튼을 클릭하여 프로그램을 종료하기로 결정하면서 당신이 무한에있는 말 :

여기 내 시나리오입니다. 프로그램을 닫으면 무엇을합니까? 루프 동안 을 종료하고 delete 명령을 실행합니까? 또는 단순히 삭제 명령을 완료하지 않고 프로그램을 종료합니다.

+1

'break'를 사용하면 while 루프에서 벗어나서 계속 작업을 수행합니다. – Rapptz

+0

시나리오가 코드의 실제 부분이라면 왜 float 포인터로 delete를 사용하고 있습니까? –

답변

5

이와 같은 간단한 C++ 프로그램에는 "닫기 버튼 클릭"이라는 개념이 없습니다. GUI 도구 키트로 게임을 시작하기 전까지는이를 다루지 않습니다. 이 프로그램을 종료하는 여러 가지 방법은 전적으로 프로그램 실행 방법에 달려 있습니다. 대부분의 경우 터미널이나 명령 줄 창에서 실행하고있을 가능성이 큽니다. 해당 터미널이 닫기 버튼을 제공하면 닫기 버튼을 클릭하면 실제로 터미널 애플리케이션에서 일부 이벤트가 트리거됩니다. 실행중인 프로그램을 어떻게 다룰지는 전적으로 해당 응용 프로그램에 달려 있습니다. 종종 터미널은 모든 하위 프로세스를 강제 종료합니다. 그러나 이것은 매우 특정 플랫폼입니다. (Linux의 경우 Signals received by bash when terminal is closed 참조)

프로그램이 강제 종료되는 경우 리소스가 delete d가 아닐지 모른다면 걱정하지 마십시오. 최신 운영 체제는 프로세스가 종료 될 때 프로세스가 할당 한 리소스를 정리합니다.

1

윈도우가 콘솔 창인지, 일반 UI 창인지, 운영 체제인지에 따라 다릅니다. UI 창을 닫으면 프로세스가 실제로 종료되지 않고 다른 작업 (예 : 정리)을 수행 할 수 있습니다. 콘솔 윈도우의 경우 프로세스가 강제 종료되지만 OS에 따라 다릅니다.

어떤 식 으로든 삭제 명령이 결국 실행되는지 여부는 중요하지 않습니다. 프로세스가 종료되기 때문에 프로세스의 힙은 아직 남아있는 것과 관계없이 완전히 회수됩니다.

0

sftrabbit처럼 이전에 말했듯이 프로세스를 종료 할 때 에 대해 걱정할 필요가 없습니다. 과 같이 서버에 사인 메시지를 보내거나 데이터베이스 항목을 커밋하는 것과 같이 더 복잡한 작업을 수행해야하는 경우 atexit()가 있습니다.

void mycleanup() { 
    // do something here. 
    // downside is ofc, that you can only use global stuff ;(
} 


int main(){ 

atexit(mycleanup); 

while(true){ 
// some code 
} 

return 0;