相关疑难解决方法(0)

C++静态初始化顺序

当我在C++中使用静态变量时,我常常想要初始化一个变量,将另一个变量传递给它的构造函数.换句话说,我想创建彼此依赖的静态实例.

在单个.cpp或.h文件中,这不是问题:将按照声明的顺序创建实例.但是,如果要使用另一个编译单元中的实例初始化静态实例,则无法指定顺序.结果是,根据天气,可能会发生构建依赖于另一个实例的实例,并且之后才构建另一个实例.结果是第一个实例初始化不正确.

有谁知道如何确保以正确的顺序创建静态对象?我已经搜索了很长时间寻找解决方案,尝试了所有这些解决方案(包括Schwarz Counter解决方案),但我开始怀疑有一个确实有效.

一种可能性是使用静态函数成员的技巧:

Type& globalObject()
{
    static Type theOneAndOnlyInstance;
    return theOneAndOnlyInstance;
}
Run Code Online (Sandbox Code Playgroud)

实际上,这确实有效.遗憾的是,您必须编写globalObject().MemberFunction()而不是globalObject.MemberFunction(),从而导致一些令人困惑和不雅的客户端代码.

更新:感谢您的反应.遗憾的是,我确实似乎回答了自己的问题.我想我必须学会忍受它......

c++ static-variables initialization-order static-order-fiasco

62
推荐指数
4
解决办法
5万
查看次数

什么是'〜'用于C++?

可能重复:
在c ++中,函数名前面的"〜"表示什么?

线与〜和另一条线有什么区别?

public:    
       myClass() {};    
       ~myClass() {};
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
237
查看次数

wiggle标志在c/c ++中意味着什么?

if (~mask == 0){...}
Run Code Online (Sandbox Code Playgroud)

我在其中一个.cpp文件中遇到过这个东西,我想知道在c/c ++中是什么意思?

c c++

0
推荐指数
1
解决办法
404
查看次数

C++ 函数名前面的~是什么意思?

\n

可能的重复:
\n 在 C++ 中,函数名称之前的波浪线 \xe2\x80\x9c~\xe2\x80\x9d 表示什么?

\n
\n\n\n\n

什么是~在 C++ 中,函数前面的含义

\n\n
class list\n{\n    ...other stuff...\npublic:\n    list();\n    ~list();\n    void insertFront(const TYPE&);\n    TYPE deleteFront();\n    void insertRear(const TYPE &);\n    int isEmpty() const;\n    void traverse() const;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

c++ class

-4
推荐指数
1
解决办法
3857
查看次数