存档

文章标签 ‘设计模式’

STL笔记之deque

2014年7月12日 没有评论

deque是双端队列,在队列头部和尾部可以快速的进行元素的插入和删除操作,相比vector而言有一定的优势,同时由于内部构造的设计,不存在vector那样扩充时带来的“配置新空间 / 移动旧数据 / 释放旧空间”问题。deque还提供Random Access Iterator,可以随机访问容器内的元素。deque同时还是STL中queue和stack的底层依赖组件。
1. deque结构设计
如果只是平时使用deque的话,可能就想不到其内部实现细节了。下面的图片展示deque的内部结构设计:[......]

继续阅读

STL笔记之迭代器

2014年6月14日 2 条评论

迭代器(iterator)是STL里面很基础也很重要的一个东西,迭代器的traits技术设计的很棒(在上一篇文章《STL笔记之空间配置器》中提到destroy函数使用了traits技术来判断对象是否具有trivial destructor,然后通过重载自动选择合适的实现版本)。
迭代器是一种行为类似指针的对象,因为指针最常用的是->和*两个操作符,因此迭代器最重要的编程工作也是对这两个操作符的重载的实现。
1. 初探traits技术
假设现在定义了这样一个迭代器MyIter,当我们拿到一个MyIt[......]

继续阅读

C++单例模式Singleton内存回收

2013年9月20日 3 条评论

单例模式(Singleton)也称为单件模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,操作系统只会弹出一个任务管理器等。
单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。 使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——也就是说除了一个全局实例外,仍然能创建相同类的本地实例。
GoF的《设计模式》一书中给出[......]

继续阅读

设计模式之桥接模式 Boost::scoped_ptr

2013年4月29日 3 条评论

打算把Chrome浏览器源码阅读的一些笔记写到博客上来,Chrome是个大工程,源码下载下来光压缩包就有2G多,解压之后6G多,过段时间我会写一篇如何编译Chrome浏览器的文章。最近阅读了src\base下部分基础组件的代码,感觉学到了很多东西。本文作为第一篇,可能看起来和Chrome没什么关系,不过这个知识点会在实际的开发中经常用到。
你可能没有系统学过设计模式,不懂桥接模式是什么玩意,没关系,你应该见过Impl;你也可能没接触过Boost,不懂scoped_ptr是什么,没关系,你应该见过[......]

继续阅读

error C2723:’virtual’ storage-class specifier illegal

2010年11月28日 没有评论

错误全称:error C2723: 'funname' : 'virtual' storage-class specifier illegal on function definition。
错误原因:C++类头文件中使用了virtual声明静态方法,在Cpp源文件中定义该静态函数时再次使用了virtual修饰。
解决方案:Cpp源文件定义静态成员函数时不再需要virtual修饰。或者定义直接放在h头文件中。
在写简单工厂模式中遇到了这个问题,因为产品类要实现多态[......]

继续阅读

error C2724:’static’ should not be used on member functions

2010年11月28日 1 条评论

错误全称:error C2724 : 'funname' : 'static' should not be used on member functions defined at file scope。
错误原因:C++类头文件中使用了static声明静态方法,在Cpp源文件中定义该静态函数时再次使用了static修饰。
解决方案:Cpp源文件定义静态成员函数时不再需要static修饰。或者定义直接放在h头文件中。
在写简单工厂模式中遇到了这个问题,因为Facto[......]

继续阅读