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

c++系列之特殊类的设计

在这里插入图片描述

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏

🌞

仅在堆上创建对象的类

将类的构造函数,拷贝构造私有,防止在栈上生成对象
提供静态成员函数,该静态成员函数中完成堆对象的创建,用类名::函数的方式调用该函数
目的是返回一个在堆上生成的对象


class HeapOnly
{
private:HeapOnly(){}HeapOnly(const HeapOnly& h) = delete;HeapOnly& operator=(const HeapOnly&) = delete;//防止拷贝
public:static HeapOnly* GetHeapOnly(){return new HeapOnly;}
};

仅在栈上创建对象的类

将类的构造函数私有防止在堆上生成对象
提供静态成员函数,该静态成员函数中完成堆对象的创建,用类名::函数的方式调用该函数
目的是返回一个在栈上生成的对象
注意:不能拷贝函数=delete因为该静态函数返回的是值拷贝需要调用拷贝构造

class StackOnly
{
private:StackOnly(){}void* operator new(size_t size) = delete;public:
//不能引用是因为st出栈后会被销毁static StackOnly GetStackOnly(){StackOnly st;return st;}
};

设计不能被继承的类

将基类用final关键字标志

 class test final
{
private:test(const test& v) = delete;test& operator=(const test& v) = delete;
public:int _a;test(int a):_a(a){}
};

设计单例对象

单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
//单例模式有两种情况
饿汉模式:
是说不管你将来用不用,程序启动时就创建一个唯一的实例对象
懒汉模式:
例对象构造十分耗时或者占用很多资源所以
懒汉模式延迟加载的方式更好
//单例模式的特定就是 构造函数私有 调用静态成员函数返回静态或者全局的变量/指针

饿汉模式

namespace hunry
{class Single{private:static Single tmp;Single(){}public:static Single GetInstance(){return tmp;}};
}

懒汉模式

namespace lazy
{class Single{private:static Single* tmp;Single(){}public://因为需要显示调用析构函数所以设置这个类static Single* GetInstance(){if (tmp == nullptr)return tmp = new Single;elsereturn tmp;}static Single Destory(){if (tmp == nullptr){delete tmp;tmp = nullptr;}}};Single* Single::tmp = nullptr;
}
http://www.lqws.cn/news/458047.html

相关文章:

  • 在 macOS 上部署 Akash Network 的完整 Shell 脚本解决方案
  • GM DC Monitor v2.0 卸载教程
  • macOS - 安装微软雅黑字体
  • 湖北师范大学人工智能与计算机学院电子信息研究生课程《随机过程》第二次作业
  • [C/C++11]_[初级]_[使用正则表达式分组来获取动态字符串]
  • 详解Redis的内存淘汰策略
  • CSS Content符号编码大全
  • 【学习笔记】锁+死锁+gdb调试死锁
  • 详解Redis的过期策略
  • uniapp评价组件
  • 音视频之H.264的可伸缩编码SVC
  • 1.21SQLCipher 简介
  • 鸿蒙uvc预览
  • .docx 和 .doc 都是 Word 文档格式的区别
  • HCIP-华为VRP系统基础
  • Sentinel实现原理
  • 使用docker-compose安装kafka
  • 计算机——硬盘分区和格式化
  • C++11 GC Interface:从入门到精通
  • docker基础入门于应用的实践
  • 使用 OpenCV 和传统机器学习实现工业开关状态识别
  • RAG 升级之路:如何让问答机器人真正“智能”起来
  • iOS应用启动时间优化:通过多工具协作提升iOS App性能表现
  • 异常的处理
  • 云计算与5G:如何利用5G网络优化云平台的性能
  • 芋道源码 - 添加反向代理, 通过公网域名访问静态资源图片
  • 【国产AI服务器】全国产PCIE5.0交换板,替代博通89104/89144,支持海光、龙芯等平台
  • 日常运维问题汇总-16
  • 西门子S7通信协议抓包分析应用
  • Tomcat项目本地部署(Servlet为例)