免费企业建站选哪家,专业做网站产品上架的有吗,手机百度 网站提交,wordpress增加移动端C/C学习——单例模式 一、什么是单例模式#xff1f;二、单例模式应用三、单例模式的特点注意#xff1a;静态成员变量的使用示例代码#xff1a; 四、单例模式C代码示例#xff08;饿汉模式#xff09;五、单例模式C示例代码#xff08;懒汉模式#xff09; 一、什么是… C/C学习——单例模式 一、什么是单例模式二、单例模式应用三、单例模式的特点注意静态成员变量的使用示例代码 四、单例模式C代码示例饿汉模式五、单例模式C示例代码懒汉模式 一、什么是单例模式
单例模式Singleton Pattern是一种创建型设计模式用于确保在应用程序的生命周期内只存在一个特定类的唯一实例。这意味着无论何时请求该类的实例都将返回同一个实例而不会创建多个相同的对象。
二、单例模式应用
资源共享当多个对象需要共享同一个资源如数据库连接、文件系统、日志记录器等时使用单例模式可以确保只有一个实例在管理这些资源避免资源冲突和浪费。
全局控制某些类负责管理全局的配置或状态信息。通过单例模式可以确保在整个应用程序中只有一个配置管理器或状态管理器。
惰性初始化某些对象的创建和初始化可能会很昂贵只有在需要时才应该进行。单例模式允许延迟对象的创建直到第一次请求它。
避免重复操作有时需要确保只有一个对象负责某种操作以避免重复执行。
三、单例模式的特点
私有的构造函数单例类的构造函数必须是私有的以防止外部代码直接实例化对象。
静态成员变量通常单例类包含一个私有的静态成员变量用于保存唯一实例的引用。
静态成员函数通常单例类包含一个静态成员函数用于获取唯一实例。这个函数通常会在内部检查是否已经创建了实例如果没有则创建一个新的实例并返回。
**
注意静态成员变量的使用
**静态成员变量是类的一部分并不是类的实例的一部分同时静态成员函数不需要使用类的实例来调用可以直接通过类名来调用
示例代码
#include iostream
class Myclass
{
public:static void myPrint(); //静态成员函数声明
};
void Myclass::myPrint() //静态成员函数声明
{std::cout 测试静态成员函数\n std::endl;
}void test_1()
{/*静态成员函数是类的一部分但不是类的实例的一部分静态成员函数不需要使用类的实例来调用可以直接通过类名来调用*/Myclass::myPrint();
}int main()
{test_1();return 0;
}四、单例模式C代码示例饿汉模式
结果在没有使用该类的情况下也会实例化对象。
#include iostream//单例模式实现 示例
class Singleton
{private:static Singleton _eton; //静态成员变量_eton的声明这里并没有定义//构造函数Singleton():_data(99) {std::cout 单例模式构造\n;}//删除拷贝构造C11特性Singleton(const Singleton) delete; //析构函数~Singleton(){}private:int _data;//对外提供的接口public:static Singleton getInstance(){return _eton;}int getData(){return _data;}
};Singleton Singleton::_eton; //静态成员函数的定义int main()
{std::cout Singleton::getInstance().getData() std::endl;return 0;
}五、单例模式C示例代码懒汉模式
懒汉模式第一次使用要使用单例对象的时候创建实例对象。如果单例对象构造特别耗时或者耗费资源加载插件、加载网络资源等可以选择懒汉模式在第一次使用的时候才创建对象。
#include iostreamclass Singleton
{private:Singleton():_data(90){std::cout 单例对象构造\n std::endl;}Singleton(const Singleton) delete;~Singleton(){}private:int _data;public:static Singleton getInstance(){static Singleton _eton;return _eton;}int getData(){return _data;}
};int main()
{std::cout Singleton::getInstance().getData() std::endl; //只有在实例化对象的时候才可以调用return 0;
}