每次导入一个命名空间,空间内的变量便会初始化一次嘛?

如题,当有多个文件引入同一个命名空间时,命名空间内定义的变量会在每一次引入时都初始化嘛

问题由来:
我在调试程序的时候发现,本应该只初始化一次的变量初始化了两次。。
调试表现为输出两句初始化

图片说明

这有悖我的程序意愿
程序文件列表

类文件

|--RRCSer.h

|--RRCSer.cpp

主程序文件:

|--main.cpp
程序的打印功能是使用一个我自定义的类CLogger来实现的,我将它定义于命名空间中
static CLogger s_logger;//全局静态日志器

问题:

我想要实现每次只有一个线程在打印消息,其他线程等待上一线程打印完毕再继续打印,我选择用互斥对象(定义为CLogger的成员变量)来实现这个功能。可调试过程中发现本应该只初始化一次的互斥对象,初始化了两次,实际调试窗口中,两个互斥对象的地址也不一样,导致主线程与子线程输出冲突(我暂时使用主线程先休眠一段时间的方法解决了这个问题)
问题输出:
图片说明

进一步的调试,发现s_logger 对象被创建了两次,也就是说主线程与子线程用的两个互斥对象。。。导致两线程共同输出消息时的冲突。我的s_logger定义于RRCSer.h头文件里的命名空间中,并且这个命名空间被main.cpp和RRCSer.cpp引入,从而得出以上问题,再问问有什么推荐的方法可以解决这个问题

大致的代码如下(只提供出现问题的代码):

RRCSer.h:

namespace Ser
{
    class CLogger
    {
    public:
        CLogger();
        ~CTestCLogger();
    private:
        HANDLE m_mutex
    };
    static CLogger s_logger;

}

RRCSer.cpp

#include <RRCSer.h>
using namespace Ser;
    CLogger::CLogger()
    {
    }

    CLogger::~CLogger()
    {
    }

main.cpp

#include "RRCSer.cpp"
using namespace Ser;
int main()
{
    return 0;
}
c++
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
angularJs对变量初始化完成,为何在方法中调用还是undefined?
1
C语言全局变量和静态全局变量和局部变量和静态局部变量在初始化和未初始化时生存期和作用域的具体情况怎么样?
2
VS对未初始化的变量没有报错?
1
C语言中结构体必须要初始化吗?
3
C语言关于结构体必须要初始化吗?
1
Java语言怎么实现函数对主程序变量的一个调用的方法呢?调用变量和函数的区别
1
数组命名,变量命名的相关问题
2
Java语言如何判断类型的变量是否是定义中表示的类型的变量呢
2
c++引用c# dll,在C++头文件中引用,c# dll和c# namespace,总是提示找不到c# namespace
0
在vs工程中使用"查看所有引用"功能,为什么会看到不同工程中的同一个变量的引用呢?
1
有什么工具可以找出一个nodejs项目中的所有全局变量么
0
lua脚本中的是否存在内置变量可以统计服务请求数量?
2
C语言地址与指针变量问题
2
关于C语言指针和被调函数内存的问题
1
sh脚本在调用其他sh脚本的时候修改改脚本中的变量数值
2
使用了未初始化的内存
1
volatile真的能避免DCL单例模式中的指令重排吗
1
springboot maven项目使用代码混乱工具proguard的时候,发现类名称变成a\b\c了,但是局部变量名称还是原来的。
0
Java语言两个Java文件中怎么共享一个变量,两个文件都要调用它,怎么实现啊
0
visual 2019 调式:不打断点,如何一边运行一边实时查看全局变量