我有这样一种情况:作为提出初始化基类的数据的副作用,派生类会计算一段必须稍后可通过其接口获得的信息。下面给出该问题的想法,使用布尔作为信息通缉: class base {
public:
base(some_initialization_data);
// ...
};
class derived : public base {
public:
derive
我最近变得痛苦地意识到Static Initialization Order Fiasco。我想知道,如果“初始化顺序在翻译单元中未定义”的规则仍然适用于子类中的静态成员所需的父类中的静态成员。 例如,假设我们(不包括,为简便起见,所有的#警卫和包括) // a.h
class A {
static int count;
static int register_subclas
考虑: int f() {
static int i = 0;
return i++;
}
struct Test {
int a, b;
Test() : a(f()), b(f()) {}
};
Test t;
我知道a是b之前,由于其在struct声明的顺序初始化。 我也知道f在g(f(), f())的两个调用是不确定的。 所以我想知道
在section 10.13 of the C++ FAQ Lite中描述了一种简单且众所周知的模式来避免静态初始化失败。 在这种标准模式中,存在一种权衡,即构造对象不会被破坏(如果析构函数没有重要的副作用,这不是问题),也不能安全地从静态对象访问另一个静态对象的析构函数(请参见section 10.14 of the C++ FAQ Lite)。 所以我的问题是:你如何避免,如果静态对象的析构函
借此示例代码: Class Foo
ReadOnly name As String
Public Sub New(name As String, dependentUpon As Foo)
Me.name = name
Console.Write("{0} created. ", name)
Console.WriteLine("Depen