何时将为指向动态创建的内存的静态指针创建内存

When memory will be created for static pointer pointing to dynamically created memory?

本文关键字:创建 内存 静态 指针 动态 何时      更新时间:2023-10-16

何时为ptr指向myClass对象创建内存?以下单例线程安全吗?

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;
}

何时将为 ptr 指向的 myClass 对象创建内存?

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

以下单音螺纹安全吗?

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

我建议你完全避免全局变量,无论你是否试图将它们伪装成单例。很难在C++中安全正确地实现该反模式。(我会说不可能,因为我不知道有什么方法可以做到这一点,但根据评论,有人比我更了解。