[[使用C ++],我知道Singleton的模式,其中构造函数为private
,并且从某些class
函数返回的是指向static GetInstance()
的静态指针。但是何时需要带有公共构造函数的类,例如:
//hpp file
class MyClass{
static MyClass * myptr;
public:
static const MyClass * GetInstance() { return myptr; }
MyClass() { myptr = this };
~MyClass() {}
...
}
//cpp file
MyClass * MyClass::myptr = nullptr;
每次我们使用构造函数创建新对象时会发生什么? myptr
被覆盖?此模式可能有哪些用例?
可怕的事情可能会出错。例如:
void func()
{
MyClass obj; // Memory allocated on stack here and put into static pointer
} // Stack memory deallocated here
int main()
{
func();
const MyClass* ptr = MyClass::GetInstance(); // Dangling pointer
}
只是不要这样做。
每次我们使用构造函数创建新对象时会发生什么?
myptr
被覆盖?
是
此模式可能有哪些用例?
我能想到的是一种非常简化的单例用法-如果您100%确定,将只创建一个对象(例如,您在main()
中创建一个实例,并且该实例一直存在于整个程序中),那很安全但是只有在这种情况下-您必须纪律严明,以使其保持有效。
我认为这很有趣。它不是常规的单例,但在某些方面相似。
考虑此场景:
多个线程维护MyClass::myptr
,每个线程都可以覆盖它。
多个线程将MyClass::myptr
用作常规单例(实际上不是)。