#include <iostream> class Rocket { private: Rocket(); //将构造函数私有化,保证了不能在外部实例化 Rocket(const Rocket& rocket); //将拷贝构造私有化,保证了不能在外部实例化 ~Rocket(); //将析构私有化 static Rocket* msRocket; //创建唯一个Rocket指针 void operator=(const Rocket& rocket); //禁止赋值操作 public: static Rocket* only1Rocket(); //创建唯一的Rocket对象 static void deleteRocket(); //销毁唯一的Rocket对象 }; Rocket* Rocket::msRocket = nullptr; Rocket::Rocket(){} Rocket::Rocket(const Rocket& rocket){} Rocket::~Rocket() {} void Rocket::operator=(const Rocket& rocket){} Rocket* Rocket::only1Rocket() { if (msRocket == nullptr) msRocket = new Rocket; return msRocket; } void Rocket::deleteRocket() { if (msRocket != nullptr) delete msRocket; msRocket == nullptr; } int main(void) { Rocket* onlyP = Rocket::only1Rocket(); //正确,创建了唯一的Rocket并指向它 Rocket* onlyp1 = Rocket::only1Rocket(); //正确,此时onlyp1指向的内存空间和onlyp是一样的 *onlyP = *onlyp1; //重载运算符=,禁止这种没有意义的操作:把自己赋值给自己 Rocket rocket; //错误,无参构造函数私有化 Rocket* p = new Rocket(*onlyP); //错误,拷贝构造私有化 return 0; }
通过私有化,构造函数和析构函数,以及适当的重载运算符来达到,整个程序的运行之中只有一个实例化对象的存在
C++单例模式
最新推荐文章于 2024-04-18 20:00:51 发布