如何捕获初始化列表中的异常?

发布于 2024-08-25 01:10:14 字数 190 浏览 10 评论 0原文

我有一个关于如何捕获初始化列表中的异常的问题。

例如,我们有一个从 Bar 派生的类 Foo

class Foo {

public:
Foo(int i) {throw 0; }

}

class Bar : public Foo{

public:

Bar() : Foo(1) {}

}

I have a question about how to catch the exception in the initialization list.

For example, we have a class Foo derived from Bar

class Foo {

public:
Foo(int i) {throw 0; }

}

class Bar : public Foo{

public:

Bar() : Foo(1) {}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

紫竹語嫣☆ 2024-09-01 01:10:14

我认为语法类似于 this (尽管最好在调用者中捕获此类内容。并且一旦抓住了你会做什么?)

Bar::Bar()
try
  : Foo(1)
{
}
catch( const SomeException &e )
{
}

I think the syntax is like this (even though it's better to catch such things in the caller. And what are you going to do once you caught it?)

Bar::Bar()
try
  : Foo(1)
{
}
catch( const SomeException &e )
{
}
避讳 2024-09-01 01:10:14

C++ 有这样做的机制,但很少使用。它是函数 try 块:

Bar::Bar()
try
  : Foo(1)
{
}
catch( Something )
{
}

请参阅这个经典的 gotw,它概述了为什么它只能用于转换异常(例如,异常类型 FooException 变为 BarException)。

C++ has a mechanism for doing so, but it is rarely used. It is the function try block:

Bar::Bar()
try
  : Foo(1)
{
}
catch( Something )
{
}

See this classic gotw, which outlines why it should only be used to translate exceptions (e.g., exception type FooException becomes BarException).

画尸师 2024-09-01 01:10:14

我相信这应该被创建对象的过程捕获。

I believe this should be caught by the procedure creating the object.

冬天旳寂寞 2024-09-01 01:10:14

考虑用 替换麻烦的实例boost::可选。然后您可以将其初始化推迟到构造函数的主体中。

Consider replacing the troublesome instance with a boost::optional. Then you can defer its initialization into the body of the constructor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文