确保在销毁之前调用某个函数 在编写一些C++代码时,我得到了一个点,在某个点上,某个结构需要一个()//Cuff>函数调用,以保证销毁不会抛出任何异常。

确保在销毁之前调用某个函数 在编写一些C++代码时,我得到了一个点,在某个点上,某个结构需要一个()//Cuff>函数调用,以保证销毁不会抛出任何异常。,c++,exception,destructor,C++,Exception,Destructor,fooa(x,y) ~a->在某些非常糟糕的情况下可能会抛出 fooa(x,y) a.end()-> ~a保证不会引发异常 我想知道是否有一种优雅的方式来强制编译器执行这个约束(解构之前必须调用end),或者至少打印一个警告 问候和感谢如果您需要一些东西作为销毁的先决条件,那么您应该通过从析构函数调用它来强制执行 但是您必须捕获任何异常,如果您需要一些东西作为销毁的先决条件,那么您应该通过从析构函数调用它来强制执行 但是您必须捕获任何异常,并且析构函数不应该抛出异常……但是包装器不就可以解决这个

fooa(x,y)

~a
->在某些非常糟糕的情况下可能会抛出

fooa(x,y)

a.end()
->

~a
保证不会引发异常

我想知道是否有一种优雅的方式来强制编译器执行这个约束(解构之前必须调用end),或者至少打印一个警告


问候和感谢

如果您需要一些东西作为销毁的先决条件,那么您应该通过从析构函数调用它来强制执行


但是您必须捕获任何异常,

如果您需要一些东西作为销毁的先决条件,那么您应该通过从析构函数调用它来强制执行


但是您必须捕获任何异常,并且

析构函数不应该抛出异常……但是包装器不就可以解决这个问题吗?包装器析构函数将调用end,但end可以抛出,因此会出现相同的问题。我可以使用try-catch,但在我看来这不是很优雅问题是:谁来处理这个异常?如果有人愿意,就让他说吧。事实上,@OliCharlesworth的推荐是最好的方法。忽略我之前的评论。@ChristopherSchildt:在终结器抛出异常的情况下并不常见,您发现了什么?析构函数不应该抛出异常……但包装器不会解决问题吗?包装器析构函数将调用end,但end可以抛出,因此会出现相同的问题。我可以使用try-catch,但在我看来这不是很优雅问题是:谁来处理这个异常?如果有人愿意,就让他说吧。事实上,@OliCharlesworth的推荐是最好的方法。忽略我之前的评论。@ChristopherSchildt:遇到终结器抛出异常的情况并不常见,您发现了什么?是的,我知道,我只是希望有一个更优雅的解决方案,我还没有意识到,我想这会给我带来厄运;-)。谢谢anyway@ChristopherSchildt:这似乎是最优雅的解决方案;还有什么比在正确的时间自动调用先决条件的方法更优雅的呢?我不喜欢在析构函数中使用try-catch的想法,这可能有点主观,但对我来说似乎很尴尬。是的,我知道,我只是希望有一个我还没有意识到的更优雅的解决方案,我想这对我来说是个坏运气;-)。谢谢anyway@ChristopherSchildt:这似乎是最优雅的解决方案;还有什么比在正确的时间自动调用先决条件的方法更优雅的呢?我不喜欢在析构函数中使用try-catch的想法,这可能有点主观,但对我来说似乎很尴尬。