C++
文章平均质量分 76
dpkirin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数:转载 2012-10-29 13:44:17 · 1364 阅读 · 0 评论 -
c++虚继承对象的内存布局(修改版)
c++虚继承对象的内存布局(修改版) 网上关于c++对象布局的文章挺多,而且《深度探索c++对象模型》(Inside TheC++ Object Model 侯捷译)一书中也很详细地介绍。如果你一点都不了解C++对象的布局,我推荐你看看《深度探索c++对象模型》的第三章,如果你意犹未尽下面的两个系列都很不错:一是陈皓的《C++ 对象的内存布局》图文并貌,原创 2013-10-06 15:32:44 · 1483 阅读 · 0 评论 -
非C++内建型别A和B, 在哪几种情况下B能隐式转化为A?
有四种方法:? 第一种:classB: public A {…}B公有继承A,可以是间接公有继承,当把B的对象赋值给A,会发生隐式转换。(待求证,保护继承、私有继承、B是A的成员能否发生转换?)? 第二种:classB:{OperatorA();….}转换constructor。类B实现了隐式转化为类A;compi原创 2013-10-06 14:59:07 · 4807 阅读 · 0 评论 -
指针与引用的区别,指针与引用的底层实现是否一样?
指针与引用,在More Effective C++的条款一有详细讲述,条款一:指针与引用的区别 指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果原创 2013-10-06 14:12:55 · 3876 阅读 · 0 评论 -
C++ 智能指针详解
C++ 智能指针详解一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto原创 2013-10-07 11:02:57 · 2104 阅读 · 0 评论 -
Debug 版本 vs Release版本
一、C Run-time LibraryWin32程序(使用Windows标准库),如果是 /MD 编译的程序,那么使用Depends.exe会发现其中需要 USER32.DLL、KERNEL32.DLL、GDI32.DLL、MSVCR80.DLL等文件支持。像前3个DLL文件是Windows系统自带的,我们不用去考虑它(除非你在程序中使用的API,windows版本不支持)。 MSV原创 2013-10-07 11:26:58 · 2323 阅读 · 0 评论 -
虚函数表的实现细节
·虚表是怎么实现的?虚表存放在哪里?·虚表中的数据是在什么时候确定的?·对象中的虚表指针又在什么时候赋值的?我们很难通过 C++语言本身来找到答案。 C++标准给编译器实现者定义了语法规范,但是被并没有定义如何实现这些语法规范,不同的编译器实现者可能有不同的实现方法,可以肯定的是他们的编译器必须符合这些语法规范。汇编语言作为最接近机器语言的计算机语言,可以为我们揭示原创 2013-10-06 14:23:54 · 20305 阅读 · 3 评论 -
STL空间配置器-第二级配置器
本文讲解SGI STL空间配置器的第二级配置器。相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片。不仅仅是碎片的问题,配置时的额外负担也是一个大问题。因为区块越小,额外负担所占的比例就越大。额外负担是指动态分配内存块的时候,位于其头部的额外信息,包括记录内存块大小的信息以及内存保护区(判断是否越界)。要想了解详细信息,请参考MSVC或者其他malloc实现。图原创 2013-10-07 11:00:24 · 1455 阅读 · 0 评论 -
C++空白基类最优化(EBO或EBCO)
对于C++中的一个空类 class X { }; 事实上并不是空的,sizeof(X)并不等于0,一般的结果是1。每个X的对象都有一个隐晦的1bytes,是被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址。 当X作为另一个类的成员时,如: class A { public: X原创 2013-10-06 14:57:38 · 3324 阅读 · 1 评论 -
STL空间配置器-第一级配置器
一、SGI STL配置器简介 SGI STL的配置器与众不同,它与标准规范不同。如果要在程序中明确使用SGI配置器,那么应该这样写:vectorint,std::alloc> iv; 他的名字是alloc,而且不接受任何参数。标准配置器的名字是allocator,而且可以接受参数。SGI STL的每一个容器都已经指定了缺省配置器:alloc。我们原创 2013-10-07 10:54:56 · 1773 阅读 · 0 评论 -
vector的内存释放
1.vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小。先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,原创 2013-10-07 11:06:30 · 2413 阅读 · 2 评论
分享