
C++
less@more
.....
展开
-
面试总结(一)转 C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相原创 2010-06-12 11:21:00 · 1373 阅读 · 5 评论 -
线程池
线程池这个概念在很多地方都有,各种各样的版本。线程池的概念就是预先产生一些等待状态的线程,到有任务到来的时候,就通过某种方法激活空闲的线程去干活。线程忙完之后就又回到等待状态。ms也给我们提供了线程池的api。涉及到的api主要有这些。CloseThreadpoolCloseThreadpoolCleanupGroupCloseThreadpoolCleanupGroupMembersCl原创 2012-02-09 20:27:56 · 968 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
C 风格(C-style)强制转型如下: (T) expression // cast expression to be of type T函数风格(Function-style)强制转型使用这样的语法:T(expression) // cast expression to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问转载 2007-07-05 22:41:00 · 827 阅读 · 0 评论 -
超强大的表达式解析类
<br /> 最近在阅读金山的源代码,偶突然看到一个用于表达式解析的类。这个类在http://www.gammon.com.au/forum/?id=4649可以下载。<br />这个类强的的地方不仅在于能解析我们所用的一般的表达式。如1+2*5**之类的。还可以解析像程序中的一段表达式。比如 <br />int a = 0;<br />int b = 1;<br />int c = a+b;<br />这样的表达式也可以解析。<br /> 我简单的看了一下这个类,在这个类中主要是使用map的进行的。原创 2011-03-10 10:35:00 · 897 阅读 · 0 评论 -
与临时对象的斗争(下)
与临时对象的斗争(下)作者:唐风原载:www.cnblos.com/liyiwen在上篇里,我们看到了 (N)RVO 和右值引用,下面我们来看看表达式模板。Expression Template(表达式模板,ET)如果有“系统地”学习过 C++ 的模板编程,那么你应该已经知道 Expression Template 这个“东西”。在模板圣经《C++ templates》的第 18 章专门用了一整章来讲这个技巧,(是的,我认为它是一种技巧)。足以见得它比较复杂,也很重要。说起 Expression转载 2010-11-01 18:07:00 · 876 阅读 · 0 评论 -
与临时对象的斗争(上)
作者:唐风出处:http://www.cnblogs.com/liyiwen本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。C++ 是一门以效率见长的语言(虽然近来越来越多的人“不齿”谈及效率,我深以为不然,在某一次的程序编写中不对效率锱铢必较并不意味意味着我们就不应该追求更多的更好的做法)。总之吧,相比起其它语言,程序员们在使 C++ 的时候会更加有意识地去避免没有效率的做法。在C++ 的程序中,临时对象的产生就是损转载 2010-11-01 18:06:00 · 963 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记(7)
《深度探索C++对象模型》读书笔记(7)。 <br /> ***Template的“具现”行为*** <br /> template class中的任何member都只能通过template class的某个实体来存取或操作。<br /> Point<float>::Status s; // ok<br />Point::Status s; // error<br /> 如果我们定义一个指针,指向特定的实体,像这样:<br /> Point<float> *ptr = 0;<br /> 由转载 2010-12-20 14:44:00 · 783 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记(6)
《深度探索C++对象模型》读书笔记(6)。 <br /> ***对象的构造和解构*** <br /> 一般而言,我们会把object尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和销毁操作。<br /> ***全局对象***<br /> 全局对象的静态初始化策略包括以下几个步骤:<br /> (1)为每一个需要静态初始化的对象产生一个_sti_……()函数,内含必要的constructor调用操作或inline expansions;<br /> (2)为每一原创 2010-12-20 14:43:00 · 763 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记(5)
《深度探索C++对象模型》读书笔记(5)。 <br /> ***纯虚拟函数*** <br /> 在设计抽象基类时,需要注意以下几点:<br /> (1)不要将destructor声明为pure virtual function;<br /> 如果将destructor声明为pure virtual function,则设计者一定得定义它。因为每一个derived class destructor会被编译器加以扩展,以静态调用得方式调用其“每一个virtual base class”以及“上一层转载 2010-12-20 14:42:00 · 845 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记(2)
《深度探索C++对象模型》读书笔记(2)。 <br /> default constructor仅在编译器需要它时,才会被合成出来。 <br /> 通常来说,由编译器合成出来的default constructor是没啥用的(trivial),但有以下几种例外:<br /> (1)带有“Default Constructor”的Member Class Object<br /> 如果一个class没有任何constructor,但它内含一个member object,而后者有default c转载 2010-12-20 14:41:00 · 638 阅读 · 1 评论 -
《深度探索C++对象模型》读书笔记 最后一记
《深度探索C++对象模型》读书笔记 最后一记。 <br /> 第6章主要讲述了执行期语意学,主要内容是关于数组的在构建和析构是如何进行的。 <br /> 第7章主要讲述了有关Template的相关内容。<br /> 这两章内容散见于《Effective C++》、《More Effective C++》、《C++Primer》《C++Templates中文版》等书籍,如果感兴趣请阅读对应的书籍。<br /> 本读书笔记主要想谈一下对语意的理解。<br /> 本人认为C++程序设计可以简单转载 2010-12-20 14:44:00 · 829 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记(1)
《深度探索C++对象模型》读书笔记(1)。 <br /> 在C++中,有两种class data members:static和nonstatic,以及三种class member functions:static、nonstatic和virtual.已知下面这个class Point声明:<br /> class Point ...{<br />public:<br />Point(float xval);<br />virtual ~Point();<br /><br />float x() cons转载 2010-12-20 14:40:00 · 824 阅读 · 1 评论 -
c++继承中的内存布局
<br />今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。 <br />——谈VC++对象模型<br />(美)简.格雷<br />程化 译 <br />译者前言 <br />一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇转载 2010-10-26 10:15:00 · 2610 阅读 · 0 评论 -
Microsoft Visual C++虚拟多继承 对象模型初步分析
<br />Microsoft Visual C++虚拟多继承 对象模型初步分析<br /> 狄骏锋 2004/8/25<br /> <转载 2010-09-03 16:25:00 · 1088 阅读 · 0 评论 -
面试总结(二)转 C++的四种cast操作符的区别--类型转换
:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型:代码:int i;double d;i = (int) d;或者:i = int (d);对于具有标准定义转换的简单类型原创 2010-06-12 11:38:00 · 744 阅读 · 0 评论 -
Umdhtools.exe: 如何使用 umdh.exe 来查找内存泄漏
http://support.microsoft.com/kb/268343用户模式转储堆 (UMDH) 实用程序处理分析 Windows 堆分配特定进程的操作系统。主要针对此实用程序,并与之关联的其他工具用于 Windows 2000 和 Windows XP。单击播放 按钮以查看此流媒体演示。请注意 ACELP ® 编解码器编码视频,您需要安装在可用的免费 ACELP ®转载 2012-06-16 17:12:58 · 2617 阅读 · 1 评论