说我有定义的变量是这样的(C++):在静态反初始化过程中,静态分配的内存可能无效吗?
static const char str[] = "Here is some string data";
而且我有一个静态分配的类实例,它引用该阵列中的析构函数,可以在此出问题?例如。某种程度上,变量会变得无效吗?
class A {
~A() {
cout << str << endl;
}
};
static A a;
我的假设是它不会出错,但我可以在任何地方清楚地发现它。我很想知道这一点。我的假设是,我们无法预测静态分配对象的析构函数被调用的顺序,但是在流程被拆除之前,数据本身永远不会被释放。含义指针指向POD应该是安全的,但不是对象实例。
含义例如这样的:
static const QString str = "Here is some string data";
或
static const std::string str = "Here is some string data";
无法安全地在一个的析构函数中使用,因为它们都在堆上分配的字符串数据,这可能是由析构函数之前一个被释放调用的析构函数。
我的假设是否正确,并且C++标准中是否有任何章节解释了这个问题,或者是某些可以验证这一点的其他权威机构的链接?
有在Alexandrescu的书(现代C++设计)与静态对象的初始化所带来的问题和潜在的解决方案的大讨论 – 2010-09-24 09:43:06
是的,你说得对,但什么是我的保证值得吗......? :-)。我也喜欢Alexandrecu在Singleton实现中的处理。那么,你基本上是在寻找标准的一部分来保证字符串文字在范围内,而静态对象析构函数被执行? Chubsdad在哪里? ;-) – 2010-09-24 09:50:41