![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++总结
匈奴未灭,何以家为
这个作者很懒,什么都没留下…
展开
-
C++中的RTTI机制总结
RTTIRTTI是运行阶段类型识别(Runtime Type Identification)的简称。假设有一个类层次结构,其中的类都是从同一个基类派生而来的,则可以让基类指针指向其中任何一个类的对象。这样便可以调用的这样的函数:在处理一些信息后,选择一个类,并创建这种类型的对象,然后返回它的地址,而该地址可以被赋给基类指针。运行时类型检查,在C++层面主要体现在dynamic_cast和typeid,VS中虚函数表的-1位置存放了指向type_info的指针。对于存在虚函数的类型,typeid和dyna原创 2020-06-25 15:39:04 · 241 阅读 · 0 评论 -
C++中的i++和++i的实现总结
i++const int int::operator(int){ int oldValue = *this; *this+=1; return oldValue;}++iconst int int::operator(int){ *this+=1; return *this;}原创 2020-06-25 15:10:25 · 382 阅读 · 0 评论 -
C++中的虚函数总结
静态函数和虚函数的区别静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销虚函数和多态多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加virtual原创 2020-06-25 14:45:21 · 169 阅读 · 1 评论 -
C++中的函数指针总结
定义函数指针是指向函数的指针变量。函数指针本身首先是一个指针变量,该指针变量指向一个具体的函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。用途调用函数和做函数的参数,比如回调函数。示例char * fun(char * p) {…} // 函数funchar * (原创 2020-06-25 14:37:01 · 112 阅读 · 0 评论 -
C++中的析构函数总结
析构函数为虚函数将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。默认的析构函数不是虚函数C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会浪费内存。因此C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置为虚函数。...原创 2020-06-25 14:26:42 · 396 阅读 · 0 评论 -
C++中的智能指针总结
智能指针auto_ptrunique_ptrshared_ptrweak_ptr智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。auto_ptr采用所有权模式。auto_ptr< string> p1 (new string (原创 2020-06-17 17:05:46 · 88 阅读 · 0 评论 -
C++中指针与数组的区别
指针与数组的区别指针数组保存数据的地址保存数据间接访问数据,首先获得指针的内容,然后将其作为地址,从该地址中提取数据直接访问数据通常用于动态的数据结构通常用于固定数目且数据类型相同的元素通过new(malloc)分配内存,delete(free)释放内存隐式的分配和删除通常指向匿名数据,操作匿名函数自身即为数据名...原创 2020-06-11 16:41:43 · 90 阅读 · 0 评论 -
C++中指针与引用的区别
指针与引用的区别1.指针有自己的一块空间,而引用只是一个别名;2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用;4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;5.指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;6.指针可以有多级指针(**p),而引用至于一级;7.指针和引用使用++运算符的意义不一样;8.如果返回动原创 2020-06-11 15:54:11 · 83 阅读 · 0 评论 -
C++中四种cast转换
C++中四种cast转换const_caststatic_castdynamic_castreinterpret_castconst_cast用于将const变量转为非conststatic_cast用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回原创 2020-06-10 00:01:56 · 122 阅读 · 0 评论 -
操作系统中程序的内存结构总结
程序的内存结构BSS段数据段代码段栈区堆区一个程序本质上都是由BSS段、数据段、代码段三个组成的。可以看到一个可执行程序在存储(没有调入内存)时分为代码段、数据区和未初始化数据区三部分。BSS段BSS段(未初始化数据区):通常用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS段属于静态分配,程序结束后静态变量资源由系统自动释放。数据段数据段:存放程序中已初始化的全局变量的一块内存区域。数据段也属于静态内存分配。代码段代码段:存放程序执行代码的一块内存区域。这部分区域的大小在程序原创 2020-05-31 22:21:48 · 675 阅读 · 0 评论 -
static关键字的作用总结
static关键字的作用全局静态变量局部静态变量静态函数类的静态成员类的静态函数全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。内存中的位置:静态存储区,在整个程序运行期间一直存在初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)作用域作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:原创 2020-05-30 00:06:34 · 102 阅读 · 0 评论