2016-08-23 3 views
-1

큰 문제가 있습니다. 예외를 던지거나 std :: terminate 또는 std :: exit를 호출하면 객체 소멸자가 실행되지 않습니다. 이것이 문제입니다.이 문장이 소멸자를 호출하고 있다고 생각했기 때문에,이 문장으로 코드가 가득합니다.모든 소멸자를 호출하는 방법?

어떻게이 문제를 해결할 수 있습니까? 나는 클래스의 구조를 바꿀 수 없다. 나는 10K 개의 코드와 많은 클래스를 가지고있다.

void Function(int Stage) 
{ 
    switch (Stage) 
    { 
     case 0: 
      //Somehow call the destructors 
      break; 
     case 1: 
      //initialize 
      break; 
     default: 
      //Give an error message and call the destructors 
    } 
} 
+5

어떤 종류의 개체입니까? 그들은 어떻게 구성되어 있습니까? 소멸자가 호출되지 않았다는 것을 어떻게 알 수 있습니까? [MCVE] (https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0ahUKEwimx-ihn9fOAhWGWxQKHYyZDVsQFghNMAY&url=http%3A%2F%)로 코드를 수정하십시오. 2Fstackoverflow.com % 2Fhelp % 2Fmcve & usg = AFQjCNEkKReghNZHBJSaky_hwPskMmG0ww & sig2 = ryrpHSHDOO-4HSaxfTgj1w) – wasthishelpful

+1

스마트 포인터를 읽습니다. 많은 번거 로움을 덜어줍니다. – DumbCoder

+4

예외 핸들러를'main()'에 추가하고'std :: terminate'를 호출하지 말고'std :: exit'를 호출하거나 예외를 던지십시오 *. – Galik

답변

1

소멸자는 예외 등이 발생할 때마다 자동으로 실행해야합니다. 이것이 바로 처음에 발명 된 이유입니다.

아마 new을 사용하여 객체를 만들었습니까? 어떤 경우에는 명시 적으로 delete해야합니다 (그리고 소멸자가 실행됩니다).

+1

예외 처리기가 발견되지 않으면 소멸자가 반드시 호출되지는 않습니다. 그것은 구현 정의되어 있습니다. – TartanLlama

관련 문제