实现单一实例模式
Implementing the singleton pattern
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给我一个错误,上面写着:调用不带参数的非静态成员函数我不明白为什么这种方法需要参数?我错过了什么吗?
缺少
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>();
}
};
你可以这样做 -
#include <iostream>
using namespace std;
class PersonA{
private:
PersonA(){cout << "PersonA cconstr called" << endl;};
static PersonA* p;
public:
static PersonA* createInstance(){
if(p == nullptr)
{
cout << "Instance created" << endl;
p= new PersonA();
}
return p;
};
};
PersonA* PersonA::p=nullptr;
int main()
{
PersonA* A = PersonA::createInstance();
PersonA* B = PersonA::createInstance();
return 0;
}
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- CRTP 模式不会触发完整的模板实例化
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 如何实例化基于输入的策略模式
- 实现单一实例模式
- 如何改进利用单一实例模式的邮件系统
- 当周围有线程时,创建类的许多实例会失败吗?- 单例模式
- 是否为每个模板实例化生成唯一的类型或id?(观察者模式示例)
- 在什么情况下,单例设计模式可能会生成同一单例类的多个实例
- 用于处理实例"数据库"的模式
- 模板实例化的抽象基类的子类的构造函数-需要替代设计模式
- c++中的工厂模式.实例化问题
- 使用MSXML 6.0向SAXXMLReader60实例添加模式集合
- 如何实例化模式对象
- 使用工厂模式实例化所有小部件是明智的吗?
- 无法实现单一实例模式
- 设计模式- c++运行时成员参数的实例化