当为静态指针指向动态创建的内存创建内存时?

时间:2014-12-11 12:19:22

标签: c++ multithreading singleton

何时为myClass指向的ptr对象创建内存? 单身线程是否安全?

Class myClass
{
    static myClass* ptr;
public:
    myClass(){}
    ~myClass(){}

    static myClass* getPtr();

};

myClass* myClass::ptr = new myClass();

myClass* myClass::getPtr()
{
   return ptr;
}

int main()
{
    myClass* temp = myClass::getPtr();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

当为ptr ??

指向的myClass对象创建内存时

在动态初始化阶段,main开始之前。请注意初始化顺序fiasco:它可能不会在其他翻译单元中的其他静态变量之前创建,因此如果他们的初始化程序尝试访问它,您可能会遇到大问题。

  

低于单音线程安全?

如果你在main开始之前没有开始任何线程,那么是的。如果另一个静态变量的初始化程序启动一个线程,那么可能不是。

我建议你完全避免全局变量,无论你是否试图将它们伪装成单身人士。在C ++中安全正确anti-pattern是一项困难的工具。 (我会说不可能,因为我不知道有什么方法可以做到,但根据评论,有人比我更了解。)

相关问题