实现单例模式

幸运蓝
using namespace std;

class PersonA{
    private:
    PersonA(){cout << "PersonA cconstr called" << endl;};

    public:
    PersonA* createInstance(){
        cout << "Instance created" << endl;
        return new PersonA;
    };
};

int main()
{
    PersonA* Hello = PersonA::createInstance();
    return 0;
}

我的 IDE 给了我一个错误,上面写着:调用没有参数的非静态成员函数我不明白为什么这个方法需要一个参数?我错过了什么吗?

杰洛德42

static 不见了。

但是您目前没有实现单例模式,如果您愿意,可以使用 Meyers 的模式:

class PersonA
{
private:
    PersonA() { std::cout << "PersonA constr called" << std::endl;}
public:
    PersonA(const PersonA&) = delete;
    PersonA& operator =(const PersonA&) = delete;

    static PersonA& getInstance(){
        static PersonA instance{};
        return instance;
    }
};

但也许你只想要一个工厂方法,然后避免原始拥有指针,并使用智能指针:

class PersonA{
private:
    PersonA() { std::cout << "PersonA constr called" << std::endl;}

public:
    std::unique_ptr<PersonA> create()
    {
        std::cout << "Instance created" << std::endl;
        return std::make_unique<PersonA>();
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章