当前位置: 首页 > news >正文

【C++特殊类的设计】

文章目录

    • 1.设计一个类,不能被拷贝
    • 2.设计一个类,只能在堆上创建对象
    • 3.设计一个类,只能在栈上创建对象
    • 4.设计一个类,不能被继承
    • 5.设计一个类,只能创建一个对象

1.设计一个类,不能被拷贝

禁止该类的拷贝构造和赋值重载即可。

class CopyBan
{
	//...
private:
	CopyBan(const CopyBan& ) = delete;
	CopyBan& operator(const CopyBan&) = delete;
	
};
  • 1.设计成私有,如果只声明编译器删除掉该默认成员函数,而不设计成私有的话,可以再类外进行定义,就不能禁止拷贝了。

2.设计一个类,只能在堆上创建对象

1.将构造函数和拷贝构造私有化,防止被人调用拷贝构造在栈上创建对象。
2.提供一个静态成员函数,返回new的对象。

class HeapOnly()
{
public:
	static HeapOnly* CreateObject()
	{
		return new HeapOnly;
	}
private:
	HeapOnly(); //只声明不实现

	HeapOnly(const HeapOnly&) = delete;
};

3.设计一个类,只能在栈上创建对象

1.将构造函数私有化,提供一个静态成员函数接口返回即可。
2.禁掉operator new 和 operator delete,防止被人在堆上创建对象。

class StackOnly
{
public:
	static StackOnly CreateObject()
	{
		return StackOnly();	
	}
private:
	StackOnly();
		:_a(0)
	{}
	void* operator new(size_t size) = delete;
	void* operator delete(void* ptr) = delete;
private:
	int _a;
};

4.设计一个类,不能被继承

1.C++98实现方法:构造函数私有化,这样子类的构造中就无法调用到父类的构造,就无法被继承。

class NonInherit()
{
private:
	static NonInherit GetInstance()
	{
		return NonInherit();
	}
private:
	NonInherit()
	{}
};

C++11方式实现
C++11中,有一个关键字final,表示该类不能被继承

class NonInherit final
{

};

5.设计一个类,只能创建一个对象

1.饿汉模式实现单例
2.懒汉模式实现单例(需注意线程安全)

参考上一篇文章。

相关文章:

  • 和鲸科技执行总裁殷自强受邀主讲华中附属同济医院大模型应用通识首期课程
  • 美摄科技开启智能汽车车内互动及娱乐解决方案2.0
  • 音乐webpack(通杀webpack-1)
  • 解决在客户端本地无法访问服务器http方式访问麦克风与摄像头的问题
  • Linux如何判断磁盘是否已分区?
  • 基于yolov11的中空圆柱形缺陷检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • (C语言)静态通讯录(正式版)(C语言小项目)
  • HTML5 Geolocation(地理定位)学习笔记
  • 数字化转型1061丨某著名企业新零售云业务中台总体解决方案(文末有下载方式)
  • springboot使用阿里限流框架-sentinel
  • 数据结构之双链表
  • day17 周末两天偷懒没更新,今天炼丹加学习,完结STL常用容器部分
  • 揭秘大数据 | 13、大数据的五大问题 之 数据科学
  • FPGA的直方图均衡
  • 【单元测试】
  • 【Docker系列七】Docker Compose 命令详解
  • 【AI大模型】搭建本地大模型GPT-J:详细步骤及常见问题
  • 代码随想录第六十二天| Floyd 算法精讲 A * 算法精讲 (A star算法) 最短路算法总结篇
  • SpringBoot @Scheduled Cron 表达式 详解
  • 04STM32外部中断
  • 临朐网站制作/营销网站大全
  • 建站快车帮助/百度快照投诉中心官网
  • html网站开发视频/网络销售公司怎么运作
  • 如何推广网站完善火2星/cnzz站长统计工具
  • 西安网站建设专业/网站统计代码
  • wordpress仿安卓主题下载/上海搜索seo