您希望在所有其他全局变量初始化后强制初始化特定类型的全局变量。
例如:
int& getCounter()
{
static int counter = 0;
return counter;
}
class Incrementer
{
public:
Incrementer()
{
getCounter()++;
}
};
class SomeOtherThingy
{
public:
SomeOtherThingy()
{
//делает что-то с результатом getCounter()
//мы ожидаем, что getCounter() должен вернуть 3
}
};
Incrementer i1{};
Incrementer i2{};
Incrementer i3{};
SomeOtherThingy thingy{};
在这种情况下,代码可以工作 -thingy它在所有类型的对象之后初始化Incrementer。但是,全局类型变量Incrementer可以位于不同的翻译单元中。在这种情况下,维持定义全局变量的顺序是非常困难的。当然,这种情况下thingy不一定是最后初始化的。
是否可以以某种方式强制SomeOtherThingy保证类型的全局对象在其他全局对象之后(至少在类型的对象之后)初始化Incrementer?
PS 计数器的实现仅作为示例进行介绍。实际上,可能有更复杂的东西(数据结构、数据库等)。
实现这样的东西太复杂了(可能取决于我们正在编写的实现),所以最好在一开始就进行初始化
main(),不要打扰。