何时为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;
}
答案 0 :(得分:2)
当为ptr ??
指向的myClass对象创建内存时
在动态初始化阶段,main
开始之前。请注意初始化顺序fiasco:它可能不会在其他翻译单元中的其他静态变量之前创建,因此如果他们的初始化程序尝试访问它,您可能会遇到大问题。
低于单音线程安全?
如果你在main
开始之前没有开始任何线程,那么是的。如果另一个静态变量的初始化程序启动一个线程,那么可能不是。
我建议你完全避免全局变量,无论你是否试图将它们伪装成单身人士。在C ++中安全正确anti-pattern是一项困难的工具。 (我会说不可能,因为我不知道有什么方法可以做到,但根据评论,有人比我更了解。)