#include using namespace std; class Single { public: static Single *getSingle() { // 定义了一个名为getSingle()的静态成员函数,用于获取Single类的单例对象 if(nullptr == m_ptr) { // lock //瑙e喅澶氱嚎绋嬪畨鍏ㄩ棶棰? // if(nullptr == ptr) m_ptr = new Single; // 如果m_ptr指针为空,则创建一个Single对象,并将其赋值给m_ptr指针,以保证只创建一个对象。最后返回m_ptr指针。 } return m_ptr; } void show() { cout << "show" << endl; } void destory() // 用于销毁Single类的单例对象。通过delete关键字释放m_ptr指针指向的内存,并将m_ptr指针置空。 { delete m_ptr; } private: Single(const Single &obj) = delete; // 定义了一个私有的构造函数Single(const Single &obj),并使用delete关键字将其禁用,防止通过拷贝构造函数创建新的对象 Single() { // 创建 cout << "Single" << endl; } ~Single() { // 销毁 m_ptr = nullptr; // 置空 cout << "~Single" << endl; } static Single *m_ptr; // 定义了一个静态的Single指针m_ptr,用于指向Single类的单例对象。初始值为nullptr }; Single *Single::m_ptr = nullptr; int main() { // Single wc; // 这行代码是注释掉的,因此不会执行 // Single ah; // 这行代码是注释掉的,因此不会执行 Single *ptr1 = Single::getSingle(); // 使用getSingle()函数获取Single类的单例对象,并将指针保存在ptr1中 ptr1->show(); // 调用单例对象的show()函数,输出"show" // ptr1->destory(); // 这行代码是注释掉的,因此不会执行 // delete ptr1; // 这行代码是注释掉的,因此不会执行 Single *ptr2 = Single::getSingle(); // 使用getSingle()函数再次获取Single类的单例对象,并将指针保存在ptr2中 // delete ptr2; // 这行代码是注释掉的,因此不会执行 return 0; // 程序正常退出 } 这段代码实现了单例模式。Single类只能创建一个对象,通过静态成员函数getSingle()获取Single类的单例对象。在getSingle()函数中,如果m_ptr指针为空,则创建一个Single对象,并将其赋值给m_ptr指针,以保证只创建一个对象。在main函数中,通过getSingle()函数获取Single类的单例对象,并调用show()函数输出"show"。最后,程序正常退出。

C++ 单例模式实现详解:确保一个类只有一个实例

原文地址: https://www.cveoy.top/t/topic/qxYX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录