2012-05-11 69 views
1

比方说,我想生成过程中的具体ID:对于所有对象,lib中的静态值是否都是相同的值?

class TestLib 
{ 
    public: 
    static int n; 

    static int generate_id(){ 
    srand (time(NULL)); 
    if (n == 0) 
    n = rand() % 10 + 1; 

    return n; 
    }; 
}; 

我有库A和B,其中包括TESTLIB:

class TEST_A 
{ 
    public: 
    static void print() { 
     std::cout << "A" << TestLib::generate_id() << std::endl; 
    }; 
}; 

class TEST_B 
{ 
    public: 
    static void print() { 
     std::cout << "B" << TestLib::generate_id() << std::endl; 
    }; 
}; 

将我保证,任何单一的过程使用一个和B会有相同的ID?

如果我静态链接库,会发生这种变化吗?

我已经在linux-x86中用共享对象测试了这个,但是我不确定原则上这是多么安全。

回答

0

定期(链接)库将共享它们的静态变量,但动态库将分别获得自己的副本。

希望你在初始化n零源文件的东西。

+0

无需初始化N到零,所有的全局(静态)变量被定义为0(INT),假(布尔),NULL(指针)。 – kovarex

1

不,你不能保证,除非你的程序是单线程的。否则generate_id两个并发调用可能可能互相覆盖的结果。

相关问题