【发布时间】:2012-03-03 11:08:33
【问题描述】:
我有一个 C++ 程序,它派生子进程来做一些工作。在这些子进程中创建了一些类,并且在成员函数中有一个静态变量,如下所示:
void MyClass::foo () {
static std::string uuid;
...
uuid = "A new value";
}
由于每个进程都是新分叉的,我假设 uuid 总是被初始化为一个空字符串。但是,在某些情况下,我注意到 uuid 在函数的第一个条目时已经被赋予了一个值,这会导致问题。
如何跨分叉进程初始化这个静态变量?我唯一的选择是使用类变量吗?使用静态变量的原因是我不想引入只在单个函数中使用的类变量,以保持类的整洁。
【问题讨论】:
-
查看答案here
-
MyClass 没有在 fork 之前实例化,但之后没有实例化,所以链接没有回答我的问题。因此,我假设静态变量应始终使用空字符串进行初始化,但情况并非总是如此。这怎么可能?
-
“分叉”是什么意思? C++ 标准中没有这样的东西。如果您指的是其他平台/库,则必须这样说。
-
在
fork()系统调用中分叉
标签: c++ static initialization