随笔分类 -  c++

摘要:内存池的实现内存池的使用是为了解决以下两个问题:1 内存碎片(Fragment),内存碎片会导致分配大块内存失败2 malloc和free比较慢至于为什么会有这两个问题,或者,这两个问题真的存在吗?以后再探讨,我们先关注内存池在网上google一番,wiki告诉我们,内存池包括"simple memory pool"和"Region-based_memory_management",wiki还告诉我们Nigix就是用的"Region-based_memory_management",至于"simple memory pool 阅读全文
posted @ 2014-04-05 23:52 mightofcode 阅读(639) 评论(0) 推荐(0)
摘要:简介signal是为了解决类之间通信的问题而出现的,更深入的原因是面向对象讲究封装,但是封装必然导致类之间沟通困难,但是使用接口的方式又太重量级--需要写很多代码,而且会导致接口爆炸比如你需要把一个接口拆分为两个时,你得做很多工作,这个时候signal的好处就出现了signal库signal库主要有QT的signal,boost的signal与signalslot(http://sigslot.sourceforge.net/)这里谈谈signalslot使用它需要定义signal,然后将成员函数绑定到signal上面,实现方法不外是functor带槽的类需要继承一个has_slot,可以猜到 阅读全文
posted @ 2013-06-28 17:55 mightofcode 阅读(5937) 评论(0) 推荐(0)
摘要:标准没有对全局变量的初始化时间做出规定即使代码已经进入main函数,也不能假定全局变量已经初始化完毕编译器仅仅保证在第一次使用全局变量前已经完成初始化,而且各个全局变量之间的初始化顺序是无法确定的总结:绝对不能依赖全局变量对复杂对象进行初始化,否则是自己找坑(嗯,最近我就跳进去了) 阅读全文
posted @ 2013-04-15 21:14 mightofcode 阅读(657) 评论(0) 推荐(0)
摘要:什么是CRTP?Thecuriously recurring template pattern(CRTP) is aC++idiom in which a classXderives from a class template instantiation usingXitself as template argument.类X继承了一个以X作为模板参数的的模板,这就是CRTP,具体介绍请参看维基百科CRTP简介CRTP的意义是父类(接下来我们称之为CRTP父类,相应的子类成为CRTP子类)知道子类的类型,可以做一些虚函数做不到的事,比如维基百科里面提到的类计数,clone函数这两个东西用虚函数 阅读全文
posted @ 2013-04-03 11:51 mightofcode 阅读(3307) 评论(1) 推荐(1)
摘要:这几天被c++成员函数指针的问题搞得晕头转向下面来慢慢整理下c++对象内存布局与c++成员函数指针的知识c++对象内存布局1 成员函数如何实现的?跟普通函数了有什么区别? 成员函数需要传递this指针,以普通的成员函数为例:obj* oo1=new obj; oo1->foo();00FF9916 mov ecx,dword ptr [ebp-80h] //传递对象地址到ecx00FF9919 call obj::foo (0FF6108h) //调用函数foo()00FF9AFF pop ecx //00FF9B00 mov dw... 阅读全文
posted @ 2013-03-03 01:44 mightofcode 阅读(1067) 评论(0) 推荐(0)
摘要:FILE* fopen(const char*,const char* type)大一刚学编程的时候就对fopen的参数很迷惑,今天仔细思考了fopen的参数的格式,我觉得参数设计得很不合理fopen的格式是这样:r 读w 写,文件截断为0a 写,添加模式+ 读+写b 二进制打开rwa是主位,+b是修饰位 但是我认为这个接口并不友好,因为这几个字符的功能并不是正交的rwa看上去就是分别代表read write append,仅仅是看上去而已,但是w竟然还有截短的功能,而a也暗含了write的意思,+则表示读写.用的时候还得去回忆这几个字符代表的意思,非常不直观如... 阅读全文
posted @ 2012-12-15 00:29 mightofcode 阅读(454) 评论(0) 推荐(0)
摘要:虽然我对boost,模板,乃至c++都很不爽,但是最近在看一套代码,里面的基本架构全是模板,无奈只好补补功课,认真学一下模板首先从tuple开始tuple,pair升级版,能容纳多个元素用处:使用它可以很方便的返回多个值(有什么其它的用处没?)下面是一个简单的实现struct null_type//建一个默认符号{};//注意模板的默认值template<typename T0=null_type,typename T1=null_type,typename T2=null_type>struct uttuple{ T0 value0; T1 value1; T2 value... 阅读全文
posted @ 2012-12-05 18:51 mightofcode 阅读(297) 评论(0) 推荐(0)
摘要:亚马逊上有一个关于<设计模式>这本书的评论,讲得很有道理,於我心有戚戚焉... well, it's over. "Patterns" have not revolutionized the world. Nor does this book need to be "studied" for deep insights.What it seems patterns are actually good for is giving common names to popular solutions to problems, to make 阅读全文
posted @ 2012-11-19 16:30 mightofcode 阅读(293) 评论(0) 推荐(0)
摘要:话说c++11有正则了,在vs2010中有支持,在std里面就有,包含<regex>即可不过感觉没有c#里用的方便,而且没有@关键词写个正则得麻烦死声明正则用regex匹配结果用match_results<T>保存 typedef match_results<const char *> cmatch; typedef match_results<const wchar_t *> wcmatch; typedef match_results<string::const_iterator> smatch; typedef match_re 阅读全文
posted @ 2012-11-09 19:04 mightofcode 阅读(696) 评论(1) 推荐(1)