随笔分类 -  c++

重构C资源释放代码
摘要:今天我在维护一个C项目的时候发现有的函数内部有很多的return语句,每个return前面都有一段相同的资源释放的代码。代码看起来就像这样:int f() { char *p1 = (char*)malloc(1024 * sizeof(char)); int *p2 = (int*)malloc(10 * sizeof(int)); ... if (...) { free(p1); free(p2); return 1; } for (...) { if (...) { free(p1); free(p2); return 2; } } ... free(p1); free(p2); re. 阅读全文

posted @ 2011-05-25 22:38 Todd Wei 阅读(2453) 评论(4) 推荐(0) 编辑

boost::mutex vs boost::recursive_mutex
摘要:boost::mutex is not re-entrant, a thread can only lock it once, otherwise it’s dead-locked. If you need re-entrant mutex, the boost::recursive_mutex is the choice. 阅读全文

posted @ 2010-12-25 16:53 Todd Wei 阅读(5087) 评论(0) 推荐(0) 编辑

理解C++ dynamic_cast
摘要:在面向对象程序设计中,有时我们需要在运行时查询一个对象是否能作为某种多态类型使用。与Java的instanceof,以及C#的as、is运算符类似,C++ 提供了dynamic_cast函数用于动态转型。相比C风格的强制类型转换和C++ reinterpret_cast,dynamic_cast提供了类型安全检查,是一种基于能力查询(Capability Query)的转换,所以在多态类型间进行转换更提倡采用dynamic_cast。本文主要介绍dynamic_cast的意义,用法和注意事项。 阅读全文

posted @ 2010-04-10 21:13 Todd Wei 阅读(48132) 评论(10) 推荐(6) 编辑

C# vs C++之三:静态构造函数
摘要:C++语言规范并未包含类似C#静态构造函数的东西,但在使用类之前做初始化工作的需求却是客观存在的。本文尝试通过C++的模版机制模拟实现静态构造函数,避免手动初始化的繁琐实现。本实现具有以下特点:在第一次构造类对象之前自动调用类提供的静态构造函数;静态构造函数被调用的时机是确定的;利用C++的局部静态变量初始化机制保证了线程安全性;基于继承的实现机制并未改变派生类的对象内存布局。 阅读全文

posted @ 2009-11-14 17:53 Todd Wei 阅读(5507) 评论(16) 推荐(3) 编辑

C# vs C++之二:GC vs RAII
摘要:C#和C++两门语言的定位不同,它们在资源管理方面采取了两种截然不同的方式:一为GC,一为RAII。GC让程序建立在更高的抽象层次上,使资源管理变得更方便,更安全;而RAII则保留了C的底层能力,同时在C++特性的支持下提供了简单有效的资源管理方式。我们知道C++最激烈的批评往往来自于C 社区,而在我看来C程序员可以不接受虚函数,不接受模板,但有什么理由不接受RAII呢?可以说RAII是C++相对C来说几乎无副作用的明显进步。 阅读全文

posted @ 2009-08-19 08:42 Todd Wei 阅读(6488) 评论(44) 推荐(9) 编辑

C# vs C++之一:委托 vs 函数指针
摘要:比较C#委托和C++函数指针的异同,探讨C++ functor和静多态:1.C#委托对象是真正的对象,C/C++函数指针变量只是函数入口地址;2.C++的委托对象:functor;3.C++的静多态:模版 阅读全文

posted @ 2009-08-09 14:29 Todd Wei 阅读(13100) 评论(18) 推荐(19) 编辑