C++
文章平均质量分 73
小六神通
I'm a newbine
展开
-
C++五个内存分区 详解~
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。原创 2016-09-22 23:19:13 · 5886 阅读 · 3 评论 -
智能指针之shared_ptr
C++最新标准C++11中已将基于引用计数的智能指针share_prt收入囊中,智能指针的使用门槛越来越低,不需要使用boost库,我们也能轻松享受智能指针给我们带来的方便。智能指针,正如它的名字一样,似乎是个近乎完美的聪明角色,程序员不用再纠结于new出来的内存在哪释放比较合适这种问题。比如当一个资源被多个模块共享时,程序员需要在所有模块的生命周期都结束时,由最后一个不使用该指针的模块触转载 2017-04-03 14:47:14 · 445 阅读 · 0 评论 -
模板的特化和偏特化
模板特化和偏特化作者:谢宝陵 周 生(合肥市炮兵学院计算中心 230031)摘要:本文通过例子介绍了在 C++标准库中广泛使用的模板特化和偏特化,并指出了模板特化和偏特化的定义规则和应用规则。关键词:模板、特化、偏特化1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL转载 2017-04-10 22:45:30 · 250 阅读 · 0 评论 -
c++ 由类型转换引起的指针偏移
由于转载了另外的转载,且原文暂时未找到,此处无法列出原文地址。在C语言中,如果对一个指针做类型转换,不会改变这个指针的值,改变的只是对指针的解释方式。但是在C++中,由于一些特性的引入,在对指针做类型转换时,编译器有时不得不对指针做一个偏移,以支持这些特性。下面将具体讨论这些情况。1. 由虚函数引起的指针偏移通常在有虚函数的类中,编译器会安插一个vptr,但是对vptr转载 2017-03-01 22:53:12 · 1847 阅读 · 0 评论 -
对象切片
原文地址:http://blog.sina.com.cn/s/blog_3c6889fe0100tzq8.html关于对象切片Thinking in C++中有这么一段话英文原版:If you upcast to an object instead of a pointer or reference, something will happen that m转载 2017-03-01 22:41:44 · 669 阅读 · 0 评论 -
指针和引用的区别与相同点
原文地址:http://blog.csdn.net/will130/article/details/48730725一、指针和引用的定义和性质区别:(1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;转载 2017-03-01 12:10:12 · 12837 阅读 · 2 评论 -
为什么(i++)不能做左值,而(++i)可以
原文地址:http://blog.csdn.net/zlhy_/article/details/8349300算下来已经很久以前了,大概有那么几个星期了吧。看到了帖子上有人问为什么下面的语句的对错原因int i = 0;int *ip = &(i++); //错误int *ip = &(++i); //正确看到上面的语句,当时以为两个都是是对转载 2017-02-28 23:05:46 · 1259 阅读 · 0 评论 -
c/c++函数调用过程分析
1 #include 2 3 int func(int param1 ,int param2,int param3) 4 { 5 int var1 = param1; 6 int var2 = param2; 7 int var3 = param3; 8 9 printf("var1=%d,var2=%d,va转载 2017-02-28 23:00:14 · 1229 阅读 · 0 评论 -
随手记(vector定义二维数组)
加入定义一个3*3的数组,数组元素是int类型的vector> arr(3);//这里的3表示数组有3行for(int i=0;i{arr[i].resize(3);//这里的3表示每一行有三个元素,即三列}原创 2016-12-07 22:12:32 · 567 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel转自:http://blog.csdn.net/haoel/article/details/1948051 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有转载 2016-11-01 22:45:03 · 201 阅读 · 0 评论 -
C++ 继承与多态
转载地址:http://blog.sina.com.cn/s/blog_704a942e0101iex6.html继承,就是新的类从已有类那里得到已有的属性和服务。从另一个角度来看,从已有类产生新类的过程就是类的派生。已有的类称为基类或父类,产生的新类称为派生类或子类。派生类同样也可以作为基类再派生新的类,这样就形成了类的层次结构。 如下图是一个简单的继承的层次关系图。继承与多转载 2016-10-19 07:35:20 · 372 阅读 · 0 评论 -
C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝(我又对其中一点点错误进行了一点修改)
C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝关键词:构造函数,浅拷贝,深拷贝,堆栈(stack),堆heap,赋值运算符摘要: 在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作。 如果对象在申明的同时马上进行的初始化操作,则称之为拷贝运算。例如: class1 A("af"); class1 B=A; 此时其实际调转载 2016-09-25 08:39:42 · 401 阅读 · 0 评论 -
静态联编和动态联编
联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于转载 2016-09-25 01:24:08 · 390 阅读 · 0 评论 -
分别在gcc和vc中计算结构体和位域的大小
一:计算结构体大小1、计算结构体大小的时候结构体本身有一个对齐参数,我们可以通过#pragma pack(n)[n必须是2的整数次幂]进行设置。2、在给结构体的每一个成员分配地址的时候,每个成员自己也有一个自己的对齐参数,对于基本数据类型,就是其该类型所占用字节的大小,对于结构体,则是成员里边占用字节数最大的成员所占字节数的大小和默认的对齐参数【通过#pragma pack(n)设原创 2017-06-04 01:53:10 · 989 阅读 · 0 评论