new表达式,operator new和placement new介绍
摘要:new/delete是c++中动态构造对象的表达式 ,一般情况下的new/delete都是指的new/delete表达式,这是一个操作符,和sizeof一样,不能改变其意义。new/delete表达式的声明如下:::(optional) new (placement_params)(optional...
阅读全文
posted @
2014-04-25 15:13
coderkian
阅读(1309)
推荐(0)
初识c++模板元编程
摘要:模板元编程(Template metaprogramming,简称TMP)是编译器内执行的程序,编译器读入template,编译输出的结果再与其他源码一起经过普通编译过程生成目标文件。通俗来说,普通运行程序是编译器生成的机器码,由处理器解释执行得到结果,TMP则是编译器实例化template过程中得...
阅读全文
posted @
2014-04-23 00:26
coderkian
阅读(557)
推荐(1)
c++之RTTI介绍
摘要:本文介绍c++的RTTI的基本用法,并初步研究RTTI的实现原理。1. 什么是RTTIRTTI即运行时类型识别(runtime type identification),用于判断指针或引用所绑定对象的动态类型,由两个运算符实现:dynamic_cast 将基类指针或引用安全地转换为派生类的指针或引用typeid 返回表达式的类型2. 为什么要用RTTI当我们需要对象的类型信息时,比如需要使用非虚函数,有必要知道当前指针绑定的对象的动态类型。3. 如何使用RTTIdynamic_cast用于安全的向下转型(type-safe downcast)。需要注意两点:运算符作用的对象必须含有虚函数。作用
阅读全文
posted @
2014-04-10 23:57
coderkian
阅读(1617)
推荐(0)
c++对象内存布局
摘要:这篇文章我要简单地讲解下c++对象的内存布局,虽然已经有很多很好的文章,不过通过实现发现有些地方不同的编译器还是会有差别的,希望和大家交流。在没有用到虚函数的时候,C++的对象内存布局和c语言的struct是一样的,这个比较容易理解,本文只对有虚函数的情况作分析,大致可以从以下几个方面阐述,1. 单一继承2. 多重继承3. 虚继承下面循序渐进的逐个分析,环境是ubuntu 12.04.3 LTS+gcc4.8.1单一继承为了实现运行时多态,虚函数的地址并不能在编译期决定,需要运行时通过虚函数表查找实际调用的虚函数地址。单一继承主要要弄明白两个问题:1.虚函数表在哪里?2. 基类和派生类的虚函数
阅读全文
posted @
2014-04-07 01:01
coderkian
阅读(1685)
推荐(1)