折腾C++的类型系统是一个很有意思的事情。当钻进去之后就会发现,一些原先比较晦涩的基本概念,在研究的过程中都清晰了不少。
check_type的实用价值在于,可以利用它清晰的看见C++中一些隐藏的类型变化。比如完美转发时的引用折叠。
在实现check_type的过程中,用到了不少泛型,甚至元编程的小技巧,充分运用了C++在预处理期、编译期和运行期(RAII)的处理能力。虽然这些代码仅是学习研究时的兴趣之作,实际项目中往往typeid的返回结果就足够了,但上面的不少技巧对一些现实中的项目开发也有一定的参考和...
分类:
编程语言 时间:
2014-05-16 01:44:26
阅读次数:
354
面向对象编程--句柄类与继承引言: C++中面向对象编程的一个颇具讽刺意味的地方是:不能使用对象支持面向对象编程,相反,必须使用指针或引用。void get_prices(Item_base object,
Item_base *pointer,
Item_base &reference)
{
//需要根据指针或引用实际所绑定...
分类:
编程语言 时间:
2014-05-15 08:19:33
阅读次数:
359
面向对象编程--句柄类与继承[续]三、句柄的使用 使用Sales_item对象可以更容易地编写书店应用程序。代码将不必管理Item_base对象的指针,但仍然可以获得通过Sales_item对象进行的调用的虚行为。1、比较两个Sales_item对象 在编写函数计算销售总数之前,需要定义比较Sales_item对象的方法。要用Sales_item作为关联容器的关键字,必须能够比较它们。关联容器默认...
分类:
编程语言 时间:
2014-05-15 07:55:23
阅读次数:
255
众所周知,C++中对堆内存的申请与释放完全由用户来控制,这就造成用户在使用的时候经常造成内存泄漏、野指针、重复释放等常见的挂掉问题,所以我们有必要提供一套机制,使得用户只需申请相应的内存,不用管释放的问题,其实这属于著名的RAII(Resource
Acquisition Is Initialization)
技术 。在C++中这种技术称作“智能指针”,C++中的智能指针技术越来越受到广泛应...
分类:
编程语言 时间:
2014-05-13 11:37:49
阅读次数:
358
循环引用:引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下:#include#include#include#includeclassparent;classchildren;typedefboost::shared_ptr
parent_pt...
分类:
其他好文 时间:
2014-05-09 13:01:22
阅读次数:
326
最近正在进行《Effective C++》的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦,写篇blog整理一下。
LinJM @HQU
2014/05/05
shared_ptr是一个智能指针。在C++ 11颁布之前,它包含在TR1(Technical Report 1)当中,现在囊括在C++11的标准库中。
智能指针
智能指...
分类:
其他好文 时间:
2014-05-07 05:50:43
阅读次数:
437
复制控制--管理指针成员引言: 包含指针的类需要特别注意复制控制,原因是复制指针时只是复制了指针中的地址,而不会复制指针指向的对象! 将一个指针复制到另一个指针时,两个指针指向同一对象。当两个指针指向同一对象时,可能使用任一指针改变基础对象。类似地,很可能一个指针删除了一对象时,另一指针的用户还认为基础对象仍然存在。指针成员默认具有与指针对象同样的行为。 大多数C++类采用以下三种方法...
分类:
编程语言 时间:
2014-05-04 17:45:43
阅读次数:
458
实现 smart_ptr 智能指针会自动地管理内存(释放不需要的内存),而不需要程序员去操心。
它能避免迷途指针(dangling pointers),内存泄漏(memory leaks), 分配失败等情况的发生。智能指针需要为所有实例维护一个引用计数,
这样才能在恰当的时刻(引用计数为0时)...
分类:
编程语言 时间:
2014-05-04 11:56:03
阅读次数:
380