C++
客户端UI层设计的思考      摘要: 貌似现在流行知乎live和微信公众号, 博客已经有些过时了,但关键是你对技术的思考和总结, 采用什么方式其实不重要。
(1) 界面和逻辑的分离, view和controller可以由不同的人分别实现, 独立变动
(2) 基于接口分层设计, 单向依赖且低耦合
(3) UI层数据类型的分类,共有共享的还是私有的
(4) 消息中心,同时支持同步/异步的消息广播机制, Manager/Controller/Data Model可以各自订阅自己感兴趣的消息  阅读全文
posted @ 2018-05-19 19:50 Richard Wei 阅读(3221) | 评论 (1)  编辑
关于字符集,编码格式,大小端的简单总结      摘要: Windows为什么不用UTF8,非要搞得和其他平台不一样?  阅读全文
posted @ 2015-07-25 01:11 Richard Wei 阅读(4454) | 评论 (2)  编辑
Stack的三种含义(转载)      摘要: stack: 数据结构, 代码运行方式, 内存区域  阅读全文
posted @ 2013-12-07 11:41 Richard Wei 阅读(1511) | 评论 (0)  编辑
字符串转整数      摘要: 细想一下这个基本的东西确实不好写, 实际上我是上面只是考虑了10进制和16进制, 没有考虑其他进制,也没有考虑小数,非法的字符串或是溢出等情况, 而真正工业级的库要考虑所有的情况, 另外还要考虑转换效率等问题。  阅读全文
posted @ 2013-09-23 22:39 Richard Wei 阅读(2625) | 评论 (0)  编辑
64位平台C/C++开发注意事项(转载)      摘要: 28个在64位平台上使用C/C++开发的注意事项  阅读全文
posted @ 2013-06-05 23:14 Richard Wei 阅读(1674) | 评论 (0)  编辑
常见的数据枚举遍历方法      摘要: FirstNext, IEnum, IEnumerator, Iterator, foreach  阅读全文
posted @ 2013-05-15 22:01 Richard Wei 阅读(3667) | 评论 (0)  编辑
C++程序风格的思考      摘要: 最近有机会看号称是公司最核心的代码, 因为这个代码以前一直是美国那边保密的, 这么重要的代码会是啥样子?
真正拿到手大致看了一下后却挺失望的,因为该代码风格基本上是我刚毕业时的C++风格----带类的C,单从代码上看写的挺滥,里面没啥设计模式, 也没有用模板, 代码里面甚至一个函数可以写上近千行。
这么重要的代码, 竟然是这种风格, 由此思考好的C++程序应该是什么风格?  阅读全文
posted @ 2013-04-27 23:28 Richard Wei 阅读(4647) | 评论 (11)  编辑
C++11标准之右值引用(ravalue reference)(转载)      摘要: 讲解C++11右值引用最详细的文章  阅读全文
posted @ 2013-04-12 17:09 Richard Wei 阅读(1049) | 评论 (0)  编辑
常见C++内存池技术      摘要: 总结下常见的C++内存池,以备以后查询。
应该说没有一个内存池适合所有的情况, 根据不同的需求选择正确的内存池才是正道.  阅读全文
posted @ 2013-04-08 20:53 Richard Wei 阅读(16559) | 评论 (0)  编辑
代码自动生成-宏带来的奇技淫巧(转载)      摘要: 关于宏的一些技巧,总结得挺好,写库的时候比较有用。  阅读全文
posted @ 2013-03-25 17:31 Richard Wei 阅读(1711) | 评论 (0)  编辑
成员函数指针与高性能的C++委托(转载)      摘要: 理解成员函数指针的最佳资料  阅读全文
posted @ 2013-03-02 18:43 Richard Wei 阅读(1298) | 评论 (1)  编辑
C++中基于Crt的内存泄漏检测      摘要: 尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询。  阅读全文
posted @ 2013-02-25 22:13 Richard Wei 阅读(7309) | 评论 (2)  编辑
C++强大背后(转载)      摘要: 在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, GP),后来为泛型而设计的模版,被发现及证明是图灵完备的,因此使C++亦可支持模版元编程范式(template metaprogramming, TMP)。C++继承了C的特色,既为高级语言,又含低级语言功能,可同时作为系统和应用编程语言。  阅读全文
posted @ 2013-02-02 20:25 Richard Wei 阅读(1248) | 评论 (0)  编辑
在C++中实现事件(委托)(续)      摘要: 在上文 在C++中实现事件(委托) 中我们实现的C#里委托方式的事件处理, 虽然使用很方便,但是似乎少了一点C#的味道, 下面我们尝试把它改成真正的C#版。
其实要改成真正的C#版,我们主要要做2件事, 一是吧CEventHandler放到外面,可以让外部直接构造, 二是实现operator +=和operator -=  阅读全文
posted @ 2013-01-31 15:39 Richard Wei 阅读(3348) | 评论 (1)  编辑
在C++中实现事件(委托)      摘要: 在C++中实现回调机制的几种方式一文中,我们提到了实现回调的三种方式(C风格的回调函数, Sink方式和Delegate方式)。在面向对象开发中,delegate的方式是最灵活和方便的,因此很早就有人用复杂的模板去模拟, 实现起来很复杂。但是现在借助C++11的function和bind, 我们可以很方便的去实现。  阅读全文
posted @ 2013-01-31 14:16 Richard Wei 阅读(9664) | 评论 (8)  编辑
C++模板会使代码膨胀吗      摘要: 通过上面的分析 ,相信我们知道了为什么ATL/WTL大量使用模板,但是生成的exe还是这么小的原因 :
不是模板不会使代码膨胀,而是ATL/WTL在设计时就关注了这个问题 ,它避免了在可能生成很多模板实例的模板类中编写大量代码(有些拗口,不知道你有没有读懂^_^)

总结下 ,如果你想用模板,但是又不想 让自己最终的可执行文件变的很大, 有2种方式:
(1)你的模板类不会生成很多模板实例,这样写成模板类还有意义吗?
(2)你的模板类的代码量或是函数个数很少,你可以仿照ATL的方式把模板无关的东西逐层剥离。  阅读全文
posted @ 2012-11-08 22:37 Richard Wei 阅读(3907) | 评论 (2)  编辑
理解C++中new背后的行为      摘要: operator new的一些原则:
a. 一般不要重写全局的operator new, 具体可以参考 不要重载全局 ::operator new
b. 如果重载了operator new, 同时提供所有版本(plain new, nothrow new, placement new)
c. 成对的提供new和delete, 即如果重载了operator new, 同时重载operator delete  阅读全文
posted @ 2012-10-06 22:25 Richard Wei 阅读(2626) | 评论 (0)  编辑
C++编程规范      摘要: C++编程规范...  阅读全文
posted @ 2012-10-06 20:05 Richard Wei 阅读(817) | 评论 (0)  编辑
探索C++对象模型      摘要: 总之,拿着一把刀,庖丁解牛般的剖析语言背后的实现细节,看起来不是那么实用,但是它能让你对语言的理解更深刻。实际上ATL中大量应用上面的技术,如果没有对C++ 对象模型有比较深刻的理解,是很难深入下去的。  阅读全文
posted @ 2012-09-21 23:02 Richard Wei 阅读(3956) | 评论 (2)  编辑
理解C++变量存储模型      摘要: 通过上面的分析,我们验证了平时C++书上关于各种类型变量存储区域的假设,简单来说就是全局变量和静态变量会被编译到可执行文件的数据节(分只读和可读写)中, 非静态的局部变量则分配在堆栈(stack)上,而new(malloc)出来的内存则分配在堆(heap)上。  阅读全文
posted @ 2012-09-20 21:57 Richard Wei 阅读(2366) | 评论 (0)  编辑
C/C++中可变参数的原理      摘要: 从上面的例子我们可以看到,对于可变参数的函数,有2种东西需要确定,一是可变参数的数量, 二是可变参数的类型,上面的例子中,参数数量我们是在第一个参数指定的,参数类型我们是自己约定的。这种方式在实际使用中显然是不方便,于是我们就有了_vsprintf, 我们根据一个格式化字符串的来表示可变参数的类型和数量,比如C教程中入门就要学习printf, sprintf等。

总的来说可变参数给我们提供了很高的灵活性和方便性,但是也给会造成不确定性,降低我们程序的安全性,很多时候可变参数数量或类型不匹配,就会造成一些不容察觉的问题,只有更好的理解它背后的原理,我们才能更好的驾驭它。  阅读全文
posted @ 2012-09-18 00:04 Richard Wei 阅读(1878) | 评论 (0)  编辑
C++中模块(Dll)对外暴露接口的几种方式      摘要: 当然,上面几种DLL对外暴露接口的方式本质上没有区别,都是利用PE文件的导出节来导出数据和函数,但是根据它们使用方式的不同,对外部模块来说还是有很大的区别,我们的推荐次序依次是:COM方式->导出API函数方式->导出类方式。  阅读全文
posted @ 2012-08-29 18:58 Richard Wei 阅读(3823) | 评论 (0)  编辑
C++中实现回调机制的几种方式      摘要: 最后简单比较下上面3种实现回调的方法:
第一种Callback的方法是面向过程的,使用简单而且灵活,正如C语言本身。
第二种Sink的方法是面向对象的,在C++里使用较多, 可以在一个Sink里封装一组回调接口,适用于一系列比较固定的回调事件。
第三种Delegate的方法也是面向对象的,和Sink封装一组接口不同,Delegate的封装是以函数为单位,粒度比Sink更小更灵活。   阅读全文
posted @ 2012-08-28 12:36 Richard Wei 阅读(4793) | 评论 (3)  编辑
C++11新特性不完全测试      摘要: Lambda, auto, 统一初始化,智能指针,Regex, Random,
function and bind, hash_map…
右值引用和Move语义, 并发(多线程库)…发布  阅读全文
posted @ 2012-06-06 17:34 Richard Wei 阅读(3250) | 评论 (4)  编辑
如何判断一个C++对象是否在堆上      摘要: 在帖子 "如何判断一个C++对象是否在堆栈上” 中, 又有人提出如何判断一个C++对象是否在堆上。  阅读全文
posted @ 2012-05-12 14:30 Richard Wei 阅读(4785) | 评论 (8)  编辑
如何判断一个C++对象是否在堆栈上      摘要: 要解答这个问题,其实就是要知道的堆栈的起始地址, 而我们知道堆栈其实就是一段有相同属性的内存页面  阅读全文
posted @ 2012-05-12 10:57 Richard Wei 阅读(5016) | 评论 (9)  编辑
一个高效的内存池实现      摘要: 在高效C++编程中看到一个不错的内存池实现方案,这里共享下,大家看看有什么不足。  阅读全文
posted @ 2012-05-05 23:23 Richard Wei 阅读(17682) | 评论 (12)  编辑
引用计数的智能指针的实现与思考      摘要: 引用计数在软件开发中是一项非常重用的技术,它可以说是无处不,我们在不知不觉中都在和它打交道,比如 Windows上的COM和Handle, Mac上的ref句柄,脚本语言中的垃圾回收技术。  阅读全文
posted @ 2012-05-05 17:04 Richard Wei 阅读(4770) | 评论 (4)  编辑