gpt4 book ai didi

c++ - 函数作用域静态非 Pod 对象初始化

转载 作者:行者123 更新时间:2023-11-27 23:24:34 27 4
gpt4 key购买 nike

我的印象是 Function Scoped Non-Pod structures are initialized函数第一次被调用。但是在 VS-2010 上,如果构造函数抛出异常,则每次都会调用构造函数,直到构造成功。

此行为实现是特定的还是标准保证的?

下面是演示行为的人为示例:

#include <iostream>
#include <string>
using namespace std;

//dummy resource class
class Resource {
public:
Resource() {
cerr<<"Allocate Resource "<<endl;
}

~Resource() {
cerr<<"Free Resource"<<endl;
}
};

//dummy class which will be statically instantiated
class Dummy {
public:

Dummy() {
cerr<<"in Dummy"<<endl;
throw(string("error"));
}

Resource res;

};

//main program
int main() {

for(int i = 0;i<3;i++) {
try {
//create a static object throw and exception
static Dummy foo;
}
catch ( std::string &e) {
cerr<<"Caught exception:"<<e<<endl<<endl;
}
}
return 1;
}

输出:

迭代次数:0

分配资源

静态对象构造器

免费资源

捕获异常:错误

迭代次数:1

分配资源

静态对象构造器

免费资源

捕获异常:错误

迭代次数:2

分配资源

静态对象构造器

免费资源

捕获异常:错误**

最佳答案

I was under the impression that Function Scoped Non-Pod structures are intialized the first time the function is invoked.

当然可以,但想想“已初始化”的含义——如果构造函数抛出异常,则对象未初始化,因为没有对象。因此,下次遇到对象声明时,它将(尝试)再次初始化。

关于c++ - 函数作用域静态非 Pod 对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com