首页 > 解决方案 > c++字符串全局变量不能正常赋值

问题描述

我有一个这样的 global.h :

#include <string>

extern std::string logPath;
extern std::string logFormat;
extern int maxKeepDays;

class Initializer
{
public:
    Initializer()
    {
        std::cout << "Initializer constructor niftyCounter=" << niftyCounter << " logPath=" << logPath << " maxKeepDays=" << maxKeepDays << " logFormat=" << logFormat << std::endl;
        if (niftyCounter++ == 0)
            init();
    }

    ~Initializer()
    {
        std::cout << "Initializer destructor" << std::endl;
        if (--niftyCounter == 0)
            clean();
    }
private:
    void init();
    void clean();
    static int niftyCounter;
};

static Initializer s_initializer;

和 global.cpp 像这样:

#include "global.h"
int Initializer::niftyCounter = 0;

int maxKeepDays = 30;
std::string logPath("default logPath");
std::string logFormat("default logFormat");

void Initializer::init()
{

    std::cout << "Initializer init() " << "logPath=" << logPath << " maxKeepDays=" << maxKeepDay << " logFormat=" << logFormat << std::endl;
    
}

void Initializer::clean()
{
    std::cout << "Initializer clean()" << std::endl;

}

然后我在 main.cpp 中使用 global.xxx,如下所示:

#include "global.h"

int main(int argc, char *argv[])
{
    // do something
}

我得到这样的输出:

Initializer constructor niftyCounter=0 logPath= maxKeepDays=30 logFormat=
Initializer init() logPath= maxKeepDays=30 logFormat=
Initializer destructor
Initializer clean()

发现整型全局变量(如maxKeepDays)可以正常赋值,但字符串变量(logPath和logFormat)为空。我不知道为什么会这样。

标签: c++stringglobal-variables

解决方案


推荐阅读