单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在C++中,可以使用静态成员变量和静态成员函数来实现单例模式。

以下是一个在C++中实现单例模式的示例:

#include <iostream>
class Student
{
private:
    std::string name;
    int age;
    static Student *instance;
    Student(const std::string &_name, int _age) : name(_name), age(_age) {}

public:
    static Student &getInstance()
    {
        if (instance == nullptr)
        {
            instance = new Student("meowrain", 12);
        };
        return *instance;
    }
    void print()
    {
        std::cout << "name: " << name << " age: " << age << std::endl;
    }
    void setName(const std::string &name)
    {
        this->name = name;
    }
    void setAge(int age)
    {
        this->age = age;
    }
};
Student *Student::instance = nullptr;
int main(void)
{
    Student stu = Student::getInstance();
    stu.print();
}

当你在 Student 类中声明了一个静态成员变量 instance,它的类型是 Student*,这是一个指向 Student 类对象的指针。静态成员变量属于类而不是类的实例,因此它可以在类的所有实例之间共享。

在 getInstance() 函数中,你首先检查 instance 是否为 nullptr,如果是,则表示还没有创建过对象。在这种情况下,你使用 new 运算符创建一个新的 Student 对象,并将其指针赋值给 instance。

这样,第一次调用 getInstance() 时,会创建一个 Student 对象,并将其地址存储在 instance 中。之后的调用中,由于 instance 不再是 nullptr,直接返回存储在 instance 中的对象的指针。

在 main() 函数中,你通过调用 Student::getInstance() 获取单例对象的指针,并将其赋值给 stu。然后,通过 stu->print() 打印学生的信息,展示了如何使用单例对象。

这样的实现确保了只有一个 Student 对象的实例,并且可以通过静态成员函数 getInstance() 来获取该实例对象。其他成员函数如 setName() 和 setAge() 可以用来修改对象的属性值。

通过这种方式,你成功地实现了单例模式。只要你调用 getInstance(),你都会得到同一个 Student 对象的指针。