随笔分类 -  c++

摘要:转自:http://blog.csdn.net/malong777/article/details/48974559 weak_ptr是一种不控制对象生存周期的智能指针,它指向一个shared_ptr管理的对象...它不会改变shared_ptr的引用计数——《C++ Primer .5th》。很明 阅读全文
posted @ 2017-02-16 00:51 柳下_MBX 阅读(1230) 评论(0) 推荐(0)
摘要:智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。智能指针主要是预防不当的析构行为,防止出现悬垂指针。在C++中,我们知道,如果使用普通指针来创建一个指向某个对象的指针,那么在使用完这个对象之后我们需要自 阅读全文
posted @ 2017-02-16 00:32 柳下_MBX 阅读(313) 评论(0) 推荐(0)
摘要:异同: 指针指向的的是一块内存,所以里面存储的是内存的地址,引用是地址的别名,所以他们本质上都是存着一块内存的地址去操作内存 但是有跟多不同的地方 1:指针可以有const类型,但是引用没有 2:指针式一个实体,引用只是一个别名 3:安全性问题:指针可以定义的时候不赋值,应用必须赋值,指针可以多次修 阅读全文
posted @ 2017-02-15 19:47 柳下_MBX 阅读(178) 评论(0) 推荐(0)
摘要:两者主要区别 1:sizeof是类型,而strlen是函数 2:sizeof如果是对类型求解,那么必须加括号,对变量的话,可以不加括号,strlen是函数,所以必须加括号 3:sizeof的参数不对退化,strlen的参数退化为指针 4:sizeof在编译的时候就将值求出来了,strlen实在运行处 阅读全文
posted @ 2017-02-15 15:07 柳下_MBX 阅读(136) 评论(0) 推荐(0)
摘要:int b; const int *a=&b; int const * a=&b; int * const a =&b; const int *const a=&b; 前两种都是一样的效果,都表示指针指向常量,*a=10这样做是不可的,因为指向的是一个常量,但是我们有两种方式改变*a的值 (1)b= 阅读全文
posted @ 2017-02-15 02:21 柳下_MBX 阅读(195) 评论(0) 推荐(0)
摘要:1:在c中,const不是常量,他只能说是一个不能改变的变量(注意是变量),而且数组的下标必须是常量,不能是变量。c编译器不能把const看成看成一个编译期间的常量,因为他在内存中有分配,c编译器不知道他在编译期间的值。 2:在c中,const int a;是可以的,因为这只是声明一个变量,告诉编译 阅读全文
posted @ 2017-02-15 01:38 柳下_MBX 阅读(581) 评论(0) 推荐(0)
摘要:c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码:int 阅读全文
posted @ 2017-02-13 09:28 柳下_MBX 阅读(317) 评论(0) 推荐(0)
摘要:我们通常会说当生命一个 class 时,如果我们不为该 class 指定一个 constructor,那么编译器会替我们实现一个 connstructor,那么这种说法一定对吗? 事实上,这是不对的。这个不是我说的,是深入理解C++对象模型说的,原话是: C++新手一般有两个常见的误解: 首先解释第 阅读全文
posted @ 2017-01-19 03:54 柳下_MBX 阅读(333) 评论(0) 推荐(0)
摘要:一:什么是大小端 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址 阅读全文
posted @ 2017-01-19 00:38 柳下_MBX 阅读(251) 评论(0) 推荐(0)
摘要:有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的 阅读全文
posted @ 2017-01-19 00:37 柳下_MBX 阅读(298) 评论(0) 推荐(0)
摘要:1. 什么是内存泄漏(memory leak)? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 2. 两种类型的内存泄漏: 堆内存泄漏(Heap leak)。对内存 阅读全文
posted @ 2017-01-18 01:52 柳下_MBX 阅读(568) 评论(0) 推荐(0)
摘要:一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事 阅读全文
posted @ 2017-01-18 01:12 柳下_MBX 阅读(300) 评论(0) 推荐(0)
摘要:在virtual的知识里摸爬滚打好几天,最近大脑有些不够用了,现在整理一下 非考虑内存对齐时各个结构的大致模型 至于考绿内存的在前面几张已经叙述过了,为了方便,我再纸上画了整体的流程,, 内存分配要注意对齐参数=min(pack,最大字节的类型); 虚函数指针和虚函数表指针跨越的大小一定是对齐参数的 阅读全文
posted @ 2017-01-17 22:54 柳下_MBX 阅读(142) 评论(0) 推荐(0)
摘要:如果说没有虚函数的虚继承只是一个噩梦的话,那么这里就是真正的炼狱。这个C++中最复杂的继承层次在VS上的实现其实我没有完全理解,摸爬滚打了一番也算得出了微软的实现方法吧,至于一些刁钻的实现方式我也想不到什么理由来解释它,也只算是知其然不知其所以然吧。 虚、实基类都没有虚函数 这种情况也还算比较简单。 阅读全文
posted @ 2017-01-17 12:01 柳下_MBX 阅读(249) 评论(0) 推荐(0)
摘要:被一个virtual搞得脑袋疼了好几天,明天继续虚函数+虚继承混合,伤不起,伤不起 阅读全文
posted @ 2017-01-17 02:26 柳下_MBX 阅读(182) 评论(0) 推荐(0)
摘要:1.无继承的普通类: 在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。 定义一个A的变量,然后看其内存布局: 最开始的 4个字节就 阅读全文
posted @ 2017-01-17 02:22 柳下_MBX 阅读(569) 评论(0) 推荐(0)
摘要:我们知道,虚继承的基类在类的层次结构中只可能出现一个实例。虚基类在类的层次结构中的位置是不能固定的,因为继承了虚基类的类可能会再次被其他类多继承。 比如class A: virtual T{} 这时T的位置如果相对于A是固定值的话,假设偏移是X,当再有个类 class B:virtual T{} ; 阅读全文
posted @ 2017-01-17 01:04 柳下_MBX 阅读(805) 评论(0) 推荐(1)
摘要:下面博客转载自别人的,我也是被这个问题坑了快两天了,关于各种虚基类,虚继承,虚函数以及数据成员等引发的一系列内存对齐的问题再次详细描述 先看下面这片代码。在这里我使用了一个空类K,不要被这个东西所迷惑,我使用这个空类的目的主要是为了让它产生虚基类表指针而又不引入虚基类成员变量,这样我就可以少叙述一些 阅读全文
posted @ 2017-01-15 20:26 柳下_MBX 阅读(407) 评论(0) 推荐(0)
摘要:转载自http://blog.csdn.net/chengonghao/article/details/51674166 例子举的特别好 很多文章大概都有像这样的结论: 1. 数据项只能存储在地址是数据项大小的整数倍的内存位置上; 2. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 3. 阅读全文
posted @ 2017-01-15 15:20 柳下_MBX 阅读(300) 评论(0) 推荐(0)
摘要:#pragma pack(n) 解释一: 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。 规则: 1、数据成员对齐规则:结构(struct)(或联合 阅读全文
posted @ 2017-01-15 14:53 柳下_MBX 阅读(183) 评论(0) 推荐(0)