【C++特殊类的设计】

news2024/12/23 22:12:36

目录

  • 一、请设计一个类,不能被拷贝
  • 二、请设计一个类,只能在堆上创建对象
  • 三、请设计一个类,只能在栈上创建对象
  • 四、请设计一个类,不能被继承
  • 五、请设计一个类,只能创建一个对象(单例模式)
    • 5.1饿汉模式
    • 5.2懒汉模式

一、请设计一个类,不能被拷贝

//设计一个类没有不能被拷贝
class CopyBan
{
public:
	//...
	CopyBan(CopyBan& cb) = delete;
	CopyBan& operator=(CopyBan& cb) = delete;
};

二、请设计一个类,只能在堆上创建对象

//设计一个类只能在堆上创建
class HeapOnly
{
public:
	static HeapOnly* Create()
	{
		return new HeapOnly;
	}

	HeapOnly(HeapOnly& ho) = delete;
private:
	HeapOnly()
	{}
};
int main()
{
	HeapOnly* pho=HeapOnly::Create();
	//如果不封拷贝这样就在栈上创建对象了
	HeapOnly copy(*pho);
}

注意这里要将拷贝构造禁掉,

三、请设计一个类,只能在栈上创建对象

在这里插入图片描述

//设计一个类只能在栈上创建
class StackOnly
{
public:
	static StackOnly CreateObj()
	{
		return StackOnly();
	}

	//不能禁掉拷贝构造
	//StackOnly(StackOnly& so) = delete;
	void* operator new(size_t size) = delete;
	void operator delete(void* p) = delete;
private:
	StackOnly()
	{}
};

四、请设计一个类,不能被继承

// C++98中构造函数私有化,派生类中调不到基类的构造函数。则无法继承
class NonInherit
 {
 public:
 static NonInherit GetInstance()
 {
 return NonInherit();
 }
 private:
 NonInherit()
 {}
 };

五、请设计一个类,只能创建一个对象(单例模式)

5.1饿汉模式

就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。

// 优点:简单
// 缺点:可能会导致进程启动慢,且如果有多个单例类对象实例启动顺序不确定。
//饿汉模式
class Singleton
{
public:
	static Singleton& CreateObj()
	{
		return _s;
	}

private:
	static Singleton _s;

	Singleton()
	{}

	Singleton(const Singleton& s) = delete;
	Singleton& operator=(const Singleton& s) = delete;
};
Singleton Singleton::_s;

5.2懒汉模式

如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。 所以这种情况使用懒汉模式(延迟加载)更好。

// 懒汉
// 优点:第一次使用实例对象时,创建对象。进程启动无负载。多个单例实例启动顺序自由控
制。
// 缺点:复杂
namespace lazy
{
	class Singleton
	{
	public:
		static Singleton* CreateObj()
		{
			if (_s == nullptr)
			{
				_s = new Singleton;
			}
			return _s;
		}

		void DelSingleton()
		{
			if (_s)
			{
				delete _s;
				_s = nullptr;
			}
		}

	private:
		static Singleton* _s;

		Singleton()
		{}

		Singleton(const Singleton& s) = delete;
		Singleton& operator=(const Singleton& s) = delete;
	};
	Singleton* Singleton::_s = nullptr;

	class GC
	{
	public:
		~GC()
		{
			Singleton::CreateObj()->DelSingleton();
		}
	};
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1110108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

那里可以自学C语言?

那里可以自学C语言? 我个人的习惯,学一门新的编程语言一定是需要目的的。 也就是学这个语言是干什么? 单纯的上学学习C语言一般都是 工科的专业作为专业课而开设的学科,这种很多都是使用谭浩强最近很多小伙伴找我,说想要一些c语言资料&…

数字化体系如何帮助企业拓展裂变增长渠道?数字化营销体系构建?

在当前的商业环境中,数字不仅仅是数据,还代表着技术和资产。企业数字化正是将数据转化为资产的过程。从信息化时代到数字化时代,企业逐渐将业务和组织、管理和创收都朝着在线化和数据化的方向发展,特别是企业的业务板块。数字化营…

图纸管理系统作用包括哪些?图纸管理系统有何作用?

图纸管理系统在设计制造行业中起着重要的作用,让企业的图纸管理变得更加便捷、更加高效,实现无纸化运作,提高工作效率。 彩虹图纸管理系统 集中管理和存储:图纸管理系统可以集中管理和存储所有图纸文件,包括2D图、3D图…

找出字符串中第一个匹配项的下标

题目链接 找出字符串中第一个匹配项的下标 题目描述 注意点 haystack 和 needle 仅由小写英文字符组成 解答思路 使用KMP算法,相比于普通地将整个字符串分成多块大小为needle.length()的子串找到第一个与needle匹配的子串,其可以在判断出任意一个子…

“当当平台关键字搜索API:轻松实现高效购物,获取海量商品信息!“

当当平台关键字搜索API可以让开发者通过API接口在当当平台上进行关键字搜索,从而获得商品列表。以下是使用当当平台关键字搜索API的一般步骤: 在当当开放平台注册账号,创建应用,获取API使用的App Key。根据当当开放平台的文档&am…

Linux系统的特点以及年轻人如何获取第一个Linux系统

由新闻想到的 新闻一:政府机构 5000 万台电脑将替换为国产 Linux ! 由这个新闻想到的,如果中国的所有个人、企业、政府把电脑系统都换成linux或者是国产操作系统,那将是怎样的一种景象!? 新闻二&#xf…

Spring Cloud 之 GateWay简介及简单DEMO的搭建

(1)Filter(过滤器): 和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的…

竞赛选题 深度学习人体语义分割在弹幕防遮挡上的实现 - python

文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖,适合作为竞…

究竟如何?深入研究在缺少main.go文件时如何运行Go代码

是否可以在没有main.go文件的情况下运行Go代码? 😀 在Go语言中,包(package)是代码组织的基本单元,而可执行程序则需要一个特殊的main包和一个main函数。本篇博客将帮助您理解Go语言中包和可执行程序的概念,以及main.go…

【单片机毕业设计】【hj-006-7】CO、有害混合气体检测 | 空气质量检测 | 有害气体检测

一、基本介绍 项目名: 基于单片机的CO、有害混合气体检测系统设计 基于单片机的空气质量检测系统设计 基于单片机的有害气体检测系统设计 项目编号:mcuclub-hj-006-7 单片机类型:STC89C52 具体功能: 1、通过MQ-7检测CO值&#x…

hbase操作学习

1.namespace list_namespace 展示数据库 create_namespace 可以带属性名 属性值 create_namespace mydb,{author>hjp,ctime>2023-10-18}describe_namespace ‘库名’ 查看库的详细信息 alter_namespace ‘库名’ 修改表的详细信息 删除就是把method设置为unset dr…

STM32 __attribute__((section(“***“)))

1.在参考例程做STM32 IAP升级时遇到了关于__attribute__((section("***")))的问题,例程使用的是 uint8_t USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000))); 例程在使用CUBEIDE编译时提示warning: at attribute directive ignored [-Watt…

长钢管每米直线度检测 在线直线度测量仪轻松搞定!

钢管是一种常见的建筑材料,广泛应用于各种建筑和工程领域。钢管的直线度对于其使用性能和使用寿命具有重要影响,因此需要对钢管的直线度进行检测。传统的钢管直线度检测方法是通过测量多段钢管的直线度和弯头的角度来实现,这种方法不仅效率低…

Python常用语句(初学入门)不要一直做脚本小子

目录 一、判断语句 1、if语句 2、if-else语句 3、if-elif语句 4、if嵌套 二、循环语句 1、while循环 2、for循环 3、while嵌套 三、Python的其他语句 1、break语句 2、continue语句 3、pass语句 4、else语句 ~~~摆脱脚本小子,从现在开始学习Python~~~ …

将用友U8的数据可视化需要哪些工具?

将金蝶U8的数据可视化需要一个奥威BI数据可视化工具,以及一套专为用友U8打造的标准化BI数据分析方案。 奥威BI SaaS平台:一键链接用友U8,立得报表 别的BI软件围绕用友U8的数据做可视化:1、准备配置环境;2、下载安装配…

canvas绘制多种文字效果:描边,阴影,渐变色等

canvas可以绘制多种样式的文字效果&#xff1a;比如渐变&#xff0c;阴影&#xff0c;描边等效果&#xff0c;如下图&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta…

淘宝天猫商品详情接口(店铺所有商品接口,商品搜索列表接口)代码展示

业务背景&#xff1a;大家有探讨稳定采集淘宝天猫商品详情页面的数据包括App端和H5端及PC端&#xff0c;采集数据包括&#xff1a;获取商品列表主图、价格、标题&#xff0c;sku&#xff0c;商品评论日期&#xff0c;评论内容&#xff0c;评论图片&#xff0c;买家昵称&#xf…

动态天气预报:Living Weather HD for Mac

Living Weather HD能够为Mac用户提供及时、准确、个性化的天气信息&#xff0c;并提供了丰富的定制选项&#xff0c;使用户能够更加方便地查看天气状况。 具有以下特点&#xff1a; 显示世界各地的准确天气预报和当地时间。自动探测出用户所在的首个地点&#xff0c;并通过搜…

如何用滚动字幕丰富视频内容?只需5个步骤

视频制作需要各种元素来吸引观众的注意力&#xff0c;其中滚动字幕是一个非常实用的工具&#xff0c;可以提供背景信息&#xff0c;引导观众&#xff0c;或者作为一种装饰元素。以下是如何使用滚动字幕丰富视频内容的五个步骤&#xff1a; 1. 下载并安装适合的辅助工具 为了快速…

fault-localization-data下载配置

一、rjust-fault-localization-data下载配置 Ubuntu 22.04.03、运行环境为&#xff1a;jdk1.7 、ant1.8. 、maven 3.8. 所需文件下载地址JDK 7/1.7jdk-7u80-linux-x64.tar.gzFault-localization-dat地址 或者git clone https://bitbucket.org/rjust/fault-localization-data.…