现在都用什么做网站,大数据网站怎么做,企业网站设计制作收费,高端制作网站服务C笔记之单例模式
参考笔记#xff1a;C笔记之call_once和once_flag code review 文章目录 C笔记之单例模式1.返回实例引用2.返回实例指针3.单例和智能指针share_ptr结合4.单例和std::call_once结合5.单例和std::call_once、unique_ptr结合 1.返回实例引用 代码
#include 笔记之单例模式
参考笔记C笔记之call_once和once_flag code review 文章目录 C笔记之单例模式1.返回实例引用2.返回实例指针3.单例和智能指针share_ptr结合4.单例和std::call_once结合5.单例和std::call_once、unique_ptr结合 1.返回实例引用 代码
#include iostreamclass Singleton {public:static Singleton getInstance() {static Singleton instance;return instance;}void printMessage() {std::cout hello world! std::endl;}private:Singleton() {} // 禁止外部创建实例Singleton(const Singleton ); // 禁止复制实例Singleton operator(const Singleton ); // 禁止赋值实例
};int main() {Singleton instance Singleton::getInstance();instance.printMessage();return 0;
}2.返回实例指针 代码
#include iostreamclass Singleton {public:static Singleton *getInstance() {if (instance nullptr) {instance new Singleton();}return instance;}void printMessage() {std::cout hello world! std::endl;}private:static Singleton *instance;Singleton() {} // 禁止外部创建实例Singleton(const Singleton ); // 禁止复制实例Singleton operator(const Singleton ); // 禁止赋值实例
};Singleton *Singleton::instance nullptr;int main() {Singleton *instance Singleton::getInstance();instance-printMessage();return 0;
}3.单例和智能指针share_ptr结合 代码
#include iostream
#include memoryclass Singleton {public:static std::shared_ptrSingleton getInstance() {if (!instance) {instance std::shared_ptrSingleton(new Singleton());}return instance;}void printMessage() {std::cout hello world! std::endl;}private:Singleton() {} // 禁止外部创建实例Singleton(const Singleton ); // 禁止复制实例Singleton operator(const Singleton ); // 禁止赋值实例static std::shared_ptrSingleton instance;
};std::shared_ptrSingleton Singleton::instance nullptr;int main() {std::shared_ptrSingleton instance Singleton::getInstance();instance-printMessage();return 0;
}4.单例和std::call_once结合 编译运行
代码
#include iostream
#include mutexclass Singleton {
public:static Singleton *getInstance() {std::call_once(initFlag, [](){instance new Singleton();});return instance;}void printMessage() {std::cout hello world! std::endl;}private:static Singleton *instance;static std::once_flag initFlag;Singleton() {} // 禁止外部创建实例Singleton(const Singleton ); // 禁止复制实例Singleton operator(const Singleton ); // 禁止赋值实例
};Singleton *Singleton::instance nullptr;
std::once_flag Singleton::initFlag;int main() {Singleton *instance Singleton::getInstance();instance-printMessage();return 0;
}5.单例和std::call_once、unique_ptr结合 编译运行
代码
#include iostream
#include mutex
#include memoryclass Singleton {
public:static Singleton *getInstance() {std::call_once(initFlag, [](){instance.reset(new Singleton());});return instance.get();}void printMessage() {std::cout hello world! std::endl;}private:static std::unique_ptrSingleton instance;static std::once_flag initFlag;Singleton() {} // 禁止外部创建实例Singleton(const Singleton ); // 禁止复制实例Singleton operator(const Singleton ); // 禁止赋值实例
};std::unique_ptrSingleton Singleton::instance;
std::once_flag Singleton::initFlag;int main() {Singleton *instance Singleton::getInstance();instance-printMessage();return 0;
}