C++单例模式

#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;
}

通过私有化,构造函数和析构函数,以及适当的重载运算符来达到,整个程序的运行之中只有一个实例化对象的存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值