![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
窗户外你的名字
这个作者很懒,什么都没留下…
展开
-
深度剖析new/delete
malloc/free和new/delete比较malloc/free和new/delete的区别和联系?它们都是动态管理内存的入口 malloc/free是C/C++标准库的函数,new/delete是C++操作符 malloc/free只是动态分配内存空间/释放空间。而new/delete除了 分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)malloc/free...原创 2018-11-06 21:55:30 · 156 阅读 · 0 评论 -
指针与引用的性能比较
我们先来看一下传指针与传引用的效率方面的对比吧本质上来说了,传引用是一个变量的别名而已。并没有开辟新的空间。而指针了是指向一个空间对应一个空间的地址好吧,我们分别通过两者效率,和本质方面看一下两者之间的区别吧。-首先看一下两者的效率看代码#include<iostream>#include<time.h>using namespace std;//me...原创 2019-01-03 22:31:16 · 3976 阅读 · 2 评论 -
友元类和类中类的一些浅显理解与对比
友元了,不管是友元类还是友元函数有应该特点是 比较鲜明的,这个特点就是不管是友元类还是友元函数他们具有一个单向的关系你可以说a是b的友元,但是你无法说b是a的友元看一个时间日期类来理解一下吧class date;class time{ friend class date;public: time(int hour, int minute, int second) :_year(h...原创 2019-01-04 13:02:40 · 464 阅读 · 0 评论 -
只能在堆上创建对象or只能在栈上创建对象
在栈上常见对象特点最显著的就是最后系统调用完以后销毁对象 在堆上创建对象了,即是自己申请对象资源空间自己销毁。好吧,看一下在栈上创建对象吧。class StackOnly {public: static StackOnly CreateObject() { return StackOnly(); } private: StackOn...原创 2019-01-04 13:38:41 · 177 阅读 · 0 评论 -
new和delete,new[],delete[]的简单模拟实现
我们清楚new,delete在底层通过调用operator new,operator delete来申请空间,和释放空间,operator new, operator delete则在顶层也是调用malloc来申请空间,free来释放空间。好啦,通过这么一个逻辑关系,我们完全可以通过malloc,free来模拟实现new,delete,new[],delete[]当然还有一点我们需在某个空间地...原创 2019-01-04 15:54:14 · 297 阅读 · 0 评论 -
string的模拟实现
我们来模拟实现一下string类的常用接口啊,不是常用类的就不模拟实现了哦,没有见过,估计也半天想不出来啊。我们看一下string类的常见接口吧函数名称 | 功能说明string() | 构造string类空字符串string(const char* s) | 构造字符串string(size_t n char c) | string类包含n个字符串strin...原创 2018-12-31 15:15:40 · 188 阅读 · 0 评论 -
迭代器的失效
我们现要简单的理解一下std里面的迭代器,我们应该如何理解了。凭我自己最简单浅显目前的理解是迭代器就是提供遍历std容器的一个指针在访问vector时候迭代器就像是一个连续的有地址的空间假设末尾迭代器上我们在vector迭代器上删除pos位置,那么我们继续向后遍历没有了pos这个地址后面的地址空间就无法推到了。总而言之了,我脑海当中是这么想的。 好了,具体看一下吧,迭代器失效,我感觉耗时...原创 2019-01-04 21:05:34 · 203 阅读 · 0 评论 -
vector的模拟实现
vector和数组看起来的却别在于一个是静态的,另外一个是动态的。而vector扩容时候,现要数据搬移到新的空间然后在释放掉以前的空间。我们模拟实现我们感觉最需要注意的还是扩容问题什么时候扩容什么时候不用扩容。已经一个检查vector扩容的接口函数也不知怎么说vector常用的接口,感觉主要分三类,第一类创建vector类,第二类修改vector元素类,第三类遍历元素类。-感觉vector...原创 2019-01-05 10:25:02 · 211 阅读 · 0 评论 -
模板之类型萃取
函数类模板萃取主要针对的是含有自定义类型的函数***我们的类型函数如果需要拷贝往往可以通过给定库函数经行萃取,但是尼?***我们的类型函数类型中每一个变量中含有的成员个数都是不知道的,我们就需要另外一种拷贝深拷贝的方式,对我们的自定义类型经行处理。好了,我们定义一种不需要传递第三参数的方法类型萃取一下。定义自定义类型和内置类型 // 代表内置类型 struct TrueType { ...原创 2019-01-11 15:25:40 · 463 阅读 · 0 评论 -
priority_queue自定义类型重载
**prioroty_queue我们可以认为就是一个堆,我们堆的性质和std里面的这个容器其实定义性质都是差不多的。在默认情况了,qriority_queue堆顶元素是最大的,也就是大堆,但是我们往往知道如果是内置类型我们想换成小堆只需要加上priority<int, vector,greater>就可以了这样也是比较简单的,虽然加上这么一个堆转换语句看起来一下子边长了,好像变麻烦了...原创 2019-01-07 18:46:55 · 649 阅读 · 0 评论 -
菱形虚拟继承
先定义两个概念单继承:一个子类只有一个直接父类时候称之为单继承多继承:一个子类有两个或者两个以上的父类时候称之为多继承显然易见,菱形继承顾名思义当然是在继承上有一个菱形的传递关系。 菱形继承的问题:从上面对象中可以发现他的问题,数据沉(去点三点水旁)余和二义性问题。我们的菱形最顶下成员继承的元素可以来子drival1(),也可以来子drival2().我们无法确认访问name是来自...原创 2019-01-13 12:58:21 · 229 阅读 · 0 评论 -
单继承与多继承的虚函数表
我们大部分时候使用的多态虚表实在public继承的基础上实现的这句话可以怎么说了?自己简单的思考逻辑认为基类中的成员或者成员函数子类中都会重新拷贝一份,也就是如果派生类中没有定义基类的某虚函数重写但是这个**虚函数的地址已经被写实拷贝写了一份放到派生类·虚表当中了** 好了,来看一下一种情况下的虚表情况吧!单继承虚表class Base{public: virtual void...原创 2019-01-13 20:50:27 · 1054 阅读 · 0 评论 -
日期类基本功能实现
实现基本日期类型的加减操作demo:通过给指定日期加减一个天数计算两个日期之间相差的天数通过数组给月份赋值通过operator重载符号对内置类型符号重载*注意operator赋值时候应该满足日期类的实际情况month < 12 && February == 29 || 28计算月份时候必须对闰年分开处理,因为闰年的Feburary是28天加减天数时候需要考虑闰...原创 2018-12-15 21:10:49 · 209 阅读 · 2 评论 -
c中const和c++中const的区别
区别**C语言的const是定义了一个const变量,该变量只具备读的功能,而不具备写的功能。**C++的const是定义了一个常量。c++中,const可以修饰类的成员函数,但在c中,不能修饰函数。c++中,被修饰的类的成员函数,实际修饰隐含的this指针,表示在类中不可以对类的任何成员进行修改#include <stdio.h>//c语言int main...原创 2018-12-10 17:08:23 · 650 阅读 · 0 评论 -
c++函数重载与缺省参数
函数重载:是指同一作用域内,一组具有相同函数名,不同参数列表的函数,构成重载关系,这组名称相同的函数成为重载函数。重载函数通常完成的功能相近,这样做的好处是减少了函数名的数量,提高了程序的可读性。注意:重载与函数的返回类型无关,参数相同仅返回值不同的两个函数不构成重载关系,与形参名字无关,只与参数的个数、类型、顺序有关。//可以构成重载关系的例子void fun(void);v...原创 2018-11-18 22:47:58 · 703 阅读 · 0 评论 -
c++ 类
类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。类可以用来表达那些不能直接和内置类型建立自然映射关系的逻辑抽象。访问控制限定符C++类中的访问控制限定符包括:public、private、protected。关键字public表示公有成员,公有成员在类的外部是可以直接访问的。关键字private表示私有成员,只有自己可以访问。而protected...原创 2018-11-18 22:53:32 · 344 阅读 · 0 评论 -
c++ STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈等。通用:1.将常见的数据结构进行封装 2:通用的算法 与数据类型无关--模板 与具体的数据结构无关 ...原创 2018-11-18 23:01:48 · 104 阅读 · 0 评论 -
C++中虚函数与函数
析构函数为什么要声明为虚 函数???基类的析构函数需要声明为虚函数: 当派生类对象经由一个基类指针被删除,而该基类带着一个non-virtual析构函数,实际执行时通常发生的是对象的派生类成员没有被销毁。这也就是局部销毁,会发生内存泄漏,所以我们通常将基类的析构函数需要声明为虚函数。class Base{public: Base() :_b(1) { ...原创 2018-11-17 22:25:06 · 144 阅读 · 0 评论 -
动态顺序链表调用完后的析构
1.创建动态顺寻链表2.在动态顺链表中通过构造函数设置三个成员变量_array(数组),_capacity(容量),_size(大小)class SeqList {public: SeqList(size_t capacity = 10) { _array = (DataType*)malloc(sizeof(DataType)*capacity); if (nullptr...原创 2018-11-24 22:15:44 · 191 阅读 · 0 评论 -
类对象的存储方式猜测
先演示一段代码:#include<iostream>using namespace std;#pragma warning( disable : 4996)#include<string.h>class student {public: void SetStudentInfo(char* name, char* gender, int age) { ...原创 2018-12-08 21:16:35 · 138 阅读 · 0 评论 -
this指针
我们先来定义一个日期类Date class Date {public: void Display() { cout << _year << "-" << _month << "-" << _day << endl; } void SetDate(int y原创 2018-12-08 18:30:08 · 135 阅读 · 0 评论 -
饿汉模式与懒汉模式
单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全 局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在一个文件 中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置 信息,这种方式简化了在复杂环境下的配置管理。单例模式有两种实现模式:饿汉模式就是说不管你将来用...原创 2018-12-06 11:17:57 · 198 阅读 · 0 评论 -
函数模板的实例化
用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例 化。1. 隐式实例化:让编译器根据实参推演模板参数的实际类型template<class T>T Add(const T& left, const T& right){ return left + right;}int main() { int a1...原创 2018-12-06 11:27:39 · 2403 阅读 · 0 评论 -
顺序链表的模板化
通过数据结构,学习到了如何在用c语言的方式实现顺序链表,我们可以定义typedef int Detatype,使得我们在更换数据类型时候变得方便。但是我们的顺序链表并不能同时适应多种类型的调试,因此我们可以将顺序链表包装成一个模板,完成这种操作。template<class T>//顺序链表在类里面基本封装完成初始化,增删,判容class SeqList{public:...原创 2018-12-06 14:55:00 · 164 阅读 · 0 评论 -
c++缺省参数
**缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该 默认值,否则使用指定的实参。**void TestFunc(int a = 0){ cout << a << endl;}int main() { TestFunc(); // 没有传参时,使用参数的默认值 TestFunc(10); ...原创 2018-12-07 11:46:28 · 496 阅读 · 0 评论 -
四种智能指针的用法以及实现原理
先来说一下四种常用的智能指针,我按使用度从低到高排一下顺序,分别是auto_ptr, unique_ptr, shared_ptr, weak_ptr,先来列举一下啊,剩下的我在一个一个慢慢说呀首先来说一下智能指针的实现原理主要是通过对象生命周期来控制程序资源的简单技术,然后了既然是指针就是可以进行和指针类似的行为(解引用和空间内容的访问)先来看一下auto_ptrd的实现原理吧temp...原创 2019-02-09 13:24:23 · 2907 阅读 · 5 评论