【发布时间】:2013-02-13 06:25:25
【问题描述】:
在编写一些 C++ 代码时,我发现某个结构需要end() 函数调用,以保证销毁不会引发任何异常。
Foo a(x,y)
~a -> 在某些非常糟糕的情况下可能会抛出
Foo a(x,y)
a.end() -> 可能会抛出
~a 保证不抛出异常
我想知道编译器是否有一种优雅的方式来强制这个约束(必须在解构之前调用 end),或者至少打印出一个警告?
问候和感谢
【问题讨论】:
-
析构函数永远不应该抛出异常...
-
但是包装器不会解决问题吗?包装析构函数会调用 end,但 end 可以抛出,因此同样的问题。我可以使用 try catch,但在我看来这不是很优雅
-
问题是:谁来处理这个异常?如果有人愿意,让他打电话。
-
实际上,@OliCharlesworth 的推荐是最好的方法。忽略我之前的评论..
-
@ChristopherSchildt:遇到终结器抛出异常的情况并不常见,你发现了什么?
标签: c++ exception destructor