小编A N*_*tar的帖子

为什么当c ++构造函数作为静态成员变量出现时未被调用?

我有一个奇怪的问题,

声明一个静态成员变量,其名称为A类中的B类。并在cpp文件中初始化。但是从未调用过B类的构造函数。我尝试使用一些小型测试,可以正常调用测试构造函数。所以这对于我们的生产系统来说很奇怪。

hpp中这样的代码:

class Test
{
    public:
    Test()
    {
        ofstream file("/tmp/wup.txt",ios::app);
        file << "wup in test" << endl;
        file.close();
    }
};

//## An extended personality
class TsdNAExtPersonality : public TsdNAPersonality{
public:

  TsdNAExtPersonality(
        s_gg62_personRec * gg62Header,
                   TsdNAFunctionType requiredFunctionType);
private:
  static Test test;

public:
  TsdNAExtPersonality( string * personalityFile, TsdNAFunctionType requiredFunctionType);
};
Run Code Online (Sandbox Code Playgroud)

在另一个cpp文件中,我使用

Test TsdNAExtPersonality::test;
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但是我发现所有方法都没有用。

  1. 没有将变量设置为成员变量,但设置为全局变量==>也无法输出
  2. 将成员变量更改为指针,并将初始化方式更改为使用new ==> no

环境是HP-UX,编译是aCC

所以我的问题是:

  1. 是否有任何编译选项会影响变量?换句话说,所有静态变量都不会被初始化。

  2. 从C ++标准开始,应该在加载库时调用它,对吗?

  3. 我使用相同的方式放置了另一个静态int值,可以对其进行初始化。但是类的构造函数没有被调用,很奇怪。

  4. 我的代码有什么错误吗?

c++ unix static constructor acc

5
推荐指数
1
解决办法
3118
查看次数

标签 统计

acc ×1

c++ ×1

constructor ×1

static ×1

unix ×1