摘要:注: 这篇文章写得有些杂乱,主题没有清晰的表述,我自己再隔了很久回头看的时候也感觉有些乱,我以后会改一改这样写文章的风格,做到每篇文章讲述一个主题,简洁清晰,多余的东西不写进来.现在在看之前记住主题呢就是这篇文章讲述了类的成员对象在内存中的布局,由于只要类包含虚函数(当然包括其继承下来的),其第一个成员一定是这个类的虚表的地址(继承层次下的每一个类都会有自己的虚表),所有我又写测试程序研究了下虚表的布局.而在写测试程序研究虚表布局的时候又用到就顺便提了些c++语言层面的知识,如函数指针等.前段時間在看Inside c++ object model的时候,写测试程序看看有虚函数的类的对象在内存中
阅读全文
摘要:这篇随笔源自在coolshell.cn上看到的一篇文章,也第一次看到这样的话,这是linux之父linus说的,在解释他为什么不用C++来写git : c++ is a horrible language, it is made more horrible by the fact that a lot of substandard programmers use it.自己看书有很多大神级别的人是这种观点,比如好像the art of unix programming的作者是,好像很多写程序的高手都认同这样的想法,像云风,coolshell的博主陈皓,陈皓表达了C++是一个不成熟的语言的观..
阅读全文
摘要:看了下thinking in c++ v2 中的 exception handling, 这里简单总结下C++语言层面exception handling理解1 . throw, try , catchthrow expression; 这是在程序普通地方用的, expression总是有一个类型的, 也就是说可以抛出任意一个 type 的 object;throw ; 是在 catch 语句里面使用的, 把接收到的object再次抛出, 当然在catch中也可以再抛出任意type的异常 1 #include <iostream> 2 using namespace std; 3
阅读全文
摘要:当constructor, destructor为protected时, 不允许实例化这个类,不管是在栈中还是在堆中,(但可以实例化派生类(protected 的 constructor可以在派生类中调用)) , 当在栈中实例化一个类时, 需要constructor和destructor都是public的, 而在堆中new时 ,需要constructor是public的, 而当调了delete时, 才需要destructor是public的 , 当constructor为private时, 不仅不允许实例化这个类, 也实例化不了派生类(private constructor只能在本类成员中调用
阅读全文
摘要:起源上周在写talk的OnlineStatManager的时候(一个用于管理用户在线类型的类), 其中有个private member.private: OnlineType getStat(int userId) const ;用来读出user的在线类型, 我把这个member声明为了const , 在读map的时候加读锁, 锁用到了自己定义的类成员 boost::shared_mutex mu_; 截取相关代码如下 1 class OnlineStatManager { 2 // ... 3 private: 4 OnlineType getStat(int us...
阅读全文
摘要:工作中的代码常看到在一个类里面定义一个 enum , 而只用这个 enum, 也许没有把它放到类中的必要, 但是不放到类中, 每一个枚举量在namespace就是直接可见的, 也不太好写了个测试小程序注意到, enum和int是一个size, 4 bytes. enum中的枚举量(常量), 在它所在的namespace中直接可见, class也是定义了一个namespace20,21行两种转换方式, 不转换是编译不过的22,23 两种定义枚举变量的方式 1 #include <iostream> 2 using namespace std; 3 4 enum Type { 5 ..
阅读全文