#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"。最后,程序正常退出。