C++单例模式学习笔记

一、概述

单例模式是指一个类只能实例化一个对象

二、单例模式的实现

  • 将构造函数和拷贝构造函数私有化
  • 定义一个类内静态成员指针
  • 在类外初始化,New一个对象
  • 将指针权限设置为私有,然后提供一个静态成员函数让外面获取这个指针
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<string>

// 单例模式是一个类只能实例化一个对象
class Maker {

// 构造函数私有化  拷贝构造函数私有化  防止创建新的对象
private:
	Maker()
	{

	}

	Maker(const Maker &m)
	{

	}

public:
	// 静态成员函数访问静态成员变量
	static Maker* getMaker()
	{
		return pMaker;
	}

private:
	// 定义一个类内的静态成员指针
	static Maker* pMaker;
};

Maker* Maker::pMaker = new Maker;// 初始化静态成员

void test01()
{
	Maker* m = Maker::getMaker();

	Maker* m1 = Maker::getMaker();

	// 这两个地址都是一样的
	cout << "m = " << m << endl;
	cout << "m1 = " << m1 << endl;

	//Maker m3 = *m;// 调用拷贝构造  地址不一样  所以将拷贝构造 也私有化 这样就没办法创建新的对象
	//cout << "m3 = " << &m3 << endl;
}

int main()
{

	test01();

	return EXIT_SUCCESS;
}


三、单例模式案例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<string>

// 单例模式是一个类只能实例化一个对象
class Printer
{
private:
	// 将无参构造和拷贝构造私有化
	Printer()
	{
		mcount = 0;
	}

	Printer(const Printer& p)
	{

	}

public:
	static Printer* getPrinter()
	{
		return p;
	}

	void printPrinter(string name)
	{
		cout << name << "打印" << endl;
		mcount++;
	}

	int getCount()
	{
		return mcount;
	}

private:
	int mcount;//记录打印的次数
	// 定义静态成员指针
	static Printer* p;
};

//类外进行初始化  New对象
Printer* Printer::p = new Printer;

void test01()
{
	// 看起来获取的是三个对象 但是实际上都是同一个对象 mcount++三次

	Printer* p1 = Printer::getPrinter();
	p1->printPrinter("打印1");

	Printer* p2 = Printer::getPrinter();
	p2->printPrinter("打印2");


	Printer* p3 = Printer::getPrinter();
	p3->printPrinter("打印3");
}

int main()
{

	test01();

	return EXIT_SUCCESS;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值