首页 > 解决方案 > 这个片段有什么作用?指向自身的静态指针

问题描述

class X 
{
private:
    static X* obj;
    X(){};
public:
    static X* setObj();
    static void removeObj();
};

X* X::obj = nullptr;

X* X::setObj()
{
    if ( obj == nullptr )
    obj = new X;
    return obj;
}

void X::removeObj()
{
    delete obj;
    obj = nullptr;
}

不能完全理解类和函数的作用,到目前为止,我知道它会创建一个对象,还是没有创建对象?

标签: c++

解决方案


它是一个Singleton,但在多线程使用中可能会出现问题。这是在 C++11 中执行此操作的正确方法- 更改名称以匹配您的代码:

X &getObj()
{
    static X inst(...);
    return inst;
}

无需显式删除对象,因为运行时会在关闭时自动删除。


推荐阅读