![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 76
x__016Meliorem
这个作者很懒,什么都没留下…
展开
-
如何定义一个只能在栈上(对上)建立对象的类
简要描述1、只能在堆上生成对象:将析构函数设置为私有。原因:C++是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。2、只能在栈上生成对象:将new 和 delete 重载为私有。原因:在堆上生成对象,使用new关键词操作,其过程分为两阶段:第一阶段,使用new在堆上寻找可转载 2017-07-19 22:45:44 · 877 阅读 · 0 评论 -
字符串编程题题目解析(From leetcode)——1
原题目的地址:https://leetcode.com/tag/string/1. Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all the 0’s and all the 1’s in these subs原创 2017-10-25 10:06:50 · 948 阅读 · 0 评论 -
C++ 内联函数
用内联函数取代宏 C++中支持内联函数为了消除原C语言中宏 和宏函数的缺点 保留其优点关于中的宏:在C语言中 宏可以提高代码的执行效率 并使代码易于更改编译器在预处理阶段将宏代码文本替换到宏的使用处宏函数省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程,提高了速度。节省了函数调用的开销。但由于宏的文本替换特性,导致其容易出错宏的使用常见错误1.`#defin原创 2017-10-22 16:54:34 · 331 阅读 · 0 评论 -
剖析STL空间适配器
为什么要有空间配置器1、小块内存带来的内存碎片问题 单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。2、小块内存频繁申请释放带来的性能问题。 关于性能这个问题要是再深究起来还是比较复杂的,下面我来简单的说明一下。 开辟空间的时候,原创 2018-02-10 03:20:20 · 527 阅读 · 0 评论 -
关于C++对象模型的经典问题
关于C++ 的继承 多态 和与之相关的对象模型知识,各个书本上很多了 今天来看几个对象模型的问题 在实践中理解C++ 对象模型:1、 在下列代码中:class A{public : A() :_a(1) {} virtual void FunTestA() {} int _a;};class B{...原创 2018-03-17 14:27:56 · 461 阅读 · 0 评论 -
设计模式之工厂模式
工厂模式大致可以分为三类: 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式。 这三种模式逐步抽象,并且更具有一般性。 工厂模式有一种非常形象的描述,建立对象的类就像一个工厂,而需要被建立的对象就是一个个产品,在工厂中加工产品,使用产品的人不用关心产品是如何生产出来的。在软件中使用工厂模式的好处就是降低了模块之间的耦合。设计模式的实现是基于C++多态来实现的。...原创 2018-03-29 23:10:14 · 205 阅读 · 0 评论 -
线程池基础
为什么要有线程池没有线程池会出现的问题。 大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是原创 2018-04-08 19:38:47 · 355 阅读 · 0 评论 -
Reactor 与 Proactor模式
一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模型(以epo转载 2018-04-08 22:04:46 · 286 阅读 · 0 评论 -
面向对象的感念和基本原则
三大特性是:封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中...原创 2018-04-02 11:50:35 · 233 阅读 · 0 评论 -
C++实现五子棋小游戏
五子棋游戏是在C++学习前期用于练手的很不错的小项目,实现粗糙的五子棋小游戏不需要对C++语法了解的非常深入也不许需要对数据结构的熟悉和理解达到多么深的层次 所以是一个非常简单的小程序实现五子棋小程序需要合理的设计整个程序的架构 整个游戏的实现分成:选择游戏方式、 初始化棋盘 、 每次落子更新棋盘 、 对是否已决出输赢的判断 和 胜者是谁的判断这几个模块 。每个模块对应实现函原创 2017-10-22 22:13:56 · 2593 阅读 · 0 评论 -
类的六个默认成员函数(转)
类默认生成的六个成员函数一、构造函数 我们知道,类的数据成员是不能在声明类的时候初始化的,因为类并不是一个实体,而是一种抽象的数据类型,并不占据存储空间。为了解决这个问题,C++提供了构造函数来处理对象的初始化。1、构造函数的作用 构造函数是一种特殊的成员函数,与其他成员函数不同,构造函数是在对象被实例化的时候自动被调用的,而且只执行这一次,它不能被用户调转载 2017-10-22 16:11:22 · 369 阅读 · 0 评论 -
设计一个不能被继承的类
一道笔试题的思考:记得,找工作时,遇到了这样的一道笔试题。记不清是那个公司的笔试题,反正觉得自己当时还真费了一点功夫的,但是也就搞定了一部分,结果还是被另一部分给鄙视啦!现在静下来分析实现如下:题目:用C++设计一个不能被继承的类不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题。因为那样的话,子类就转载 2017-07-19 22:48:51 · 399 阅读 · 0 评论 -
文本文件与二进制文件详解(转发)
转自:http://www.cnblogs.com/pengwangguoyh/articles/3223072.html前言:1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以”行”为基本结构的一种信息组织和存储方式。 2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、转载 2017-09-14 19:16:05 · 425 阅读 · 0 评论 -
C++ 四种类型转换
C++ 四种类型转换隐式类型转换int i = 0;double d = i;强制类型转换int* p = &i;int b = (int)p;//不会报错static_cast//静态的类型转换 可以转换不含有virtual函数的对象 只能转换相关类型(如不可以把指针转换成整型值)int i = 0;double dl原创 2017-09-20 23:27:33 · 296 阅读 · 0 评论 -
简述单例模式
一、单利模式的定义在特定的时候我们会遇到一种情况:一个类只能有一个对象被实例化,这个时候我们就可以使用单例模式。单利模式通过类本身来管理其唯一实例。在设计这个类的时候,让它只能产生一个实例并提供对此实例的全局访问。所以单例模式的两个要素分别是:1.确保一个类只有一个实例被创建。2.提供一个对实例的全局访问指针。原创 2017-10-18 16:31:38 · 1137 阅读 · 0 评论 -
C++中static关键字
C++中的static关键字的总结 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:转载 2017-10-18 16:35:18 · 228 阅读 · 0 评论 -
浅谈C++ string类
这里向大家介绍C++库函数中的一个文件 。为了简化程序员的工作量并提高代码的安全性和健壮性 C++标准库找专门提供了文件用来提供对字符串进行多种操作的库函数接口,这些接口配合C++中文件中的strlen strstr strcpy .......系列函数共同为字符串的处理服务。本文中模拟的string类没有加迭代器 为了简化抽象出文件中string类的功能、内部实现机制和设原创 2017-10-06 00:40:51 · 311 阅读 · 0 评论 -
剑指offer--知识迁移问题
所谓知识迁移能力就是根据已经掌握的知识、技术、能够迅速学习理解新的技术并运用到实际工作中去。这是作为一名软件开发工程师必备的能力这里简单介绍几组本科生招聘面试中易考到的考察知识迁移能力的问题 统计一个数字在排序数组中出现的次数。例{1,2,3,3,3,3,3,4,5,5,5,6} 输出 重复的数字3出现的次数思路:本题若使用二分查找找到重复的原创 2017-10-10 23:05:42 · 361 阅读 · 0 评论 -
深浅拷贝 & 类型萃取
一、深浅拷贝问题 1)什么是浅拷贝所谓的浅拷贝是指在源对象向目标对象进行拷贝的时候 将源对象的各个成员逐一赋给新对象的成员这样做看似无可厚非,实际上如果源对象的数据成员中有指向一片内存空间的指针变量是 这种浅拷贝只是将这个指针变量作为右值付给目的对象的指针。这样做的结果是新对象的指针和源对象的指针指向同一片内存空间 。改动原创 2017-10-19 17:46:30 · 343 阅读 · 0 评论 -
互斥锁与自旋锁
下面摘录一些关于C++当中 自旋锁(spin lock)与互斥量(mutex)的比较 自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁。 互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入原创 2018-04-11 20:11:32 · 262 阅读 · 0 评论