我有這樣一種情況:作爲提出初始化基類的數據的副作用,派生類會計算一段必須稍後可通過其接口獲得的信息。下面給出該問題的想法,使用布爾作爲信息通緝: 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