相关疑难解决方法(0)

当函数中的静态变量的构造函数异常终止时会发生什么?

我有一个功能,可以减少到这个:

void f() {
    static MyObject o("hello");

    DoSomethingWith(o);
}
Run Code Online (Sandbox Code Playgroud)

这个函数是在一个C API边界上调用的,所以就像一个好孩子一样,我用它try来捕获任何在越过边界之前抛出的异常并搞砸了:

void f() {
    try {
        static MyObject o("hello");

        DoSomethingWith(o);
    } catch (const MyObjectException& e) {
        Message("Constructor of o failed");
    }
}
Run Code Online (Sandbox Code Playgroud)

第一次调用此函数,我收到消息"Constructor of o failed".但是,稍后,再次调用该函数,我再次收到该消息.我收到的消息多次f被称为.我正在使用Visual C++,所以这告诉我MSVC++的功能,但不是应该做什么.

我的问题是,当的构造会发生什么static功能的可调异常终止(由throw荷兰国际集团,一longjmp出构造的,终止线程,它是在等)?static在它之前和之后声明的任何其他变量应该发生什么?我也很感谢标准中的任何相关引用.

c++ static initialization exception

5
推荐指数
1
解决办法
1397
查看次数

标签 统计

c++ ×1

exception ×1

initialization ×1

static ×1