【C++】-还在玩普通的类吗,这里面有好几种特殊的类的设计,快进来看看

本文介绍了如何在C++中设计五种特殊类:禁止拷贝、仅在堆上创建对象、仅在栈上创建对象、不可继承和单例模式(饿汉与懒汉模式)。通过实例展示了各类设计模式及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
💖作者:小树苗渴望变成参天大树🎈
🎉作者宣言:认真写好每一篇博客💤
🎊作者gitee:gitee
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!


前言

今天我们讲解特殊类的设计,再我们的开发中难免会出现一些特殊情况,也是设计出一些特殊的类,他们和普通类不同担忧很相似,接下来博主会带大家设计出五种特殊的类,话不多说,我们开始进入正文的讲解。


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

拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,
只需让该类不能调用拷贝构造函数以及赋值运算符重载即可

C++98的使用方法:
class A
{
   
private:
	A(const A& a){
   }
	A& operator=(const A& a){
   }
};

C++11的用法:
class A
{
   
public:
	A(const A& a)=delete;
	A& operator=(const A& a)=delete;
private:
	
};

C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上
=delete,表示让编译器删除掉该默认成员函数。不拷贝再下面几个场景都需要使用到,防拷贝的用法

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

第一种方式:

class heaponly
{
   
public:


private:
	~heaponly(){
   }

};
int main()
{
   
	heaponly p0;//这样会报错
	heaponly* p2 = new heaponly;
	return 0;
}

原因是p2可以手动进行释放,但是需要再类中写一个接口来进行释放:
在这里插入图片描述

第二种方式:

class heaponly
{
   
public:
	static heaponly* creakobj()
	{
   
		return new heaponly;
	}
private:
	//1.先将构造函数私有化
	heaponly(){
   }
	
	//3.防拷贝
	heaponly(const heaponly& h) = delete;
	heaponly& operator=(const heaponly& h) = delete;
};

将构造函数私有化,都创建不了对象在这里插入图片描述所以写一个接口,通过调用接口来实现创建对象。但是调用函数需要,这时候就是先有鸡还是先有蛋的问题,所以我们将接口设计成静态的。在这里插入图片描述解决了再堆上创建对象的问题,但是又有可能通过构造和赋值,再栈上创建对象,所以需要防拷贝在这里插入图片描述
这样就解决问题了。

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

这个设计理念和上面哪个很相似
我们需要将构造函数私有化,这样才能保证都创建不了对象,然后提供一个接口。

class stackonly
{
   
public:
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橘柚!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值