【问题标题】:guarantee a certain function is called before destruction保证在销毁之前调用某个函数
【发布时间】: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


【解决方案1】:

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

但是您必须捕获任何异常,并且not let them leak from the destructor

【讨论】:

  • 是的,我知道,我只是希望有一个我还没有意识到的更优雅的解决方案,我认为我运气不好 ;-)。无论如何谢谢
  • @ChristopherSchildt:这似乎是最优雅的解决方案;还有什么比在正确的时间自动调用先决条件的方法更优雅的呢?
  • 我不喜欢在析构函数中尝试捕获的想法,这可能有点主观,但它对我来说看起来很尴尬。
猜你喜欢
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多