C++ 单例模式(模板继承+单例模式)

C++ 的单例模式

manager.h

#ifndef _MANAGER_H_  // #ifndef的意义:防止头文件被重复包含和编译
#define _MANAGER_H_  // #define 同上
// 代码内容

//类的权限默认是私有的
class Manager
{
public: // 类权限设置为 公有

	// 获取自身实例对象
	static Manager* instance() {
		// 若不存在则创建,若存在则直接返回
		if (!manager) {
			manager = new Manager();
		}
		return manager;
	}

	~Manager() = default;


private: //类权限设置为 内部访问
	// 创建
	static Manager* manager;

private: //类权限设置为 内部访问

	// 单例模式 只允许有一个
	Manager() = default;
};

#endif // 同上

main.cpp

#include <iostream>
#include "manager.h"


int main()
{   
    // 单例模式 获取实例化对象
    Manager* manager = Manager::instance();
    
    return 0;
}

模板继承+单例模式

manager.h是基础类,game_manager.h 继承于 manager.h

game_manager.h

#ifndef _GAME_MANAGER  // #ifndef的意义:防止头文件被重复包含和编译
#define _GAME_MANAGER  // #define 同上#pragma once

#include "manager.h"


//类的权限默认是私有的
class Game_Manager : public Manager<Game_Manager>
{
	// 友元函数:一般是在类内声明为友元(friend)的全局函数。声明后,该函数可以访问类的私有成员
	friend class Manager<Game_Manager>;

public: // 类权限设置为 公有
	Game_Manager()
	{

	}
private: //类权限设置为 内部访问
	~Game_Manager()
	{

	}


};

#endif

manager.h

#ifndef _MANAGER_H_  // #ifndef的意义:防止头文件被重复包含和编译
#define _MANAGER_H_  // #define 同上
// 使用模板
template <typename T>

//类的权限默认是私有的
class Manager
{
public: // 类权限设置为 公有

	// 获取自身实例对象
	static T* instance() {
		// 若不存在则创建,若存在则直接返回
		if (!manager) {
			manager = new T();
		}
		return manager;
	}

	


private: //类权限设置为 内部访问
	// 创建
	static T* manager;

protected: //成员可以被派生类对象访问,不能被用户代码(类外)访问。

	// 单例模式 只允许有一个
	Manager() = default;

	~Manager() = default;

	// 删除 拷贝构造函数
	Manager(const Manager&) = delete;
	// 删除 运算符
	Manager& operator = (const Manager&) = delete;


};

template <typename T>
T* Manager<T>::manager = nullptr;

#endif // 同上

main.cpp

#include <iostream>
#include "manager.h"
#include "Game_Manager.h"




int main()
{   
    // 
    Game_Manager* instane = Game_Manager::instance();
    std::cout << "Hello Demo" << std::endl;


    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

默执_

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值