重庆中国建设监理协会网站,西宁做网站最好的公司,自己建立网站要钱吗,前程无忧最新招聘网单例模式 引言
对于程序设计的时候#xff0c;我们有些时候不希望平凡的创建对象#xff0c;比如创建这个一个对象的成本很高#xff0c;比如线程池#xff0c;这个时候我们希望共享一个对象#xff0c;这个时候#xff0c;就可以使用我们的单例模式。
单例模式本质上是…单例模式 引言
对于程序设计的时候我们有些时候不希望平凡的创建对象比如创建这个一个对象的成本很高比如线程池这个时候我们希望共享一个对象这个时候就可以使用我们的单例模式。
单例模式本质上是一种程序设计的方式我们通过合理的设计使得某一种类只能定义一次通过类的静态的方式调用
防止拷贝构造和赋值重载
其实只需要防止拷贝构造即可因为构造不成功更不可能赋值重载。
我们提供一种优雅的方式继承nocopy类
// 定义不能拷贝的类作为基类
class NoCopy
{
public:NoCopy() default;// 将拷贝构造和赋值重载删除NoCopy(const NoCopy) delete;NoCopy operator(const NoCopy) delete;
};通过继承实现单例模式
这里我只使用了C11 也可以使用C17的更高级的特性简化
class Object : public NoCopy
{
private:Object() {}
public:Object getInstance(){if (self nullptr) self std::unique_ptrObject();return *self;}static std::unique_ptrObject self;
};std::unique_ptrObject Object::self nullptr;在这种情况下我们只需要调用Object::getInstance()就可以直接获取到对象。
饿汉和懒汉模式
上面我创建的思想是懒汉模式。 饿汉模式就是无论我是否使用这个单例对象我都会在执行程序的时候创建一个对象 懒汉模式更像是一种延迟定义只有我们需要使用它的时候我们才进行创建 恶汉模式: 直接创建std::unique_ptrObject Object::self std::make_unique(); // make_unique是C14支持
Object getInstance() { return *self; }懒汉模式 延迟创建Object getInstance(){if (self nullptr) self std::unique_ptrObject();return *self;}
std::unique_ptrObject Object::self nullptr;