2016-08-23 70 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