10 2013 档案

(原创)一个和c#中Lazy<T>类似的c++ Lazy<T>类的实现
摘要:在.net 4.0中增加一个延迟加载类Lazy,它的作用是实现按需延迟加载,也许很多人用过。一个典型的应用场景是这样的:当初始化某个对象时,该对象引用了一个大对象,需要创建,这个对象的创建时需要较长的时间,同时也需要在托管堆上分配较多的空间,这样可能会在初始化时变得很慢,尤其是UI应用时,会导致用户体验很差。其实狠多时候并不需要马上就获取大数据,只是在需要时获取,这种场景就很适合延迟加载了。先看看c#中Lazy如何使用的吧:class LargeObject{ public int InitializedBy { get { return initBy; } } int ini... 阅读全文

posted @ 2013-10-25 22:36 qicosmos(江南) 阅读(3113) 评论(1) 推荐(3)

(原创)c++11改进我们的模式之改进命令模式
摘要:模式虽然精妙,却难完美,比如观察者模式中观察者生命周期的问题;比如访问者模式中循环依赖的问题等等;其它很多模式也存在这样那样的一些不足之处,如使用场景受限、实现复杂、不够简洁、不够通用等。但我觉得不足之处大都是可以采取一些手法去弥补去改进的,比如用c++11的新特性来改进。因此,便有了c++11... 阅读全文

posted @ 2013-10-21 07:43 qicosmos(江南) 阅读(4173) 评论(2) 推荐(2)

(原创)C++11改进我们的程序之move和完美转发
摘要:本次要讲的是右值引用相关的几个函数:std::move, std::forward和成员的emplace_back,通过这些函数我们可以避免不必要的拷贝,提高程序性能。move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。如图所示是深拷贝和move的区别。 这种移动语义是很有用的,比如我们一个对象中有一些指针资源或者动态数组,在对象的赋值或者拷贝时就不需要拷贝这些资源了。在c++11之前我们的拷贝构造函数和赋值函数可能要这样定义:假设一个A对象内部有一个资源m_ptr;A& A::operator=(const A& rhs){// 阅读全文

posted @ 2013-10-18 16:06 qicosmos(江南) 阅读(11686) 评论(3) 推荐(5)

(原创)C++11改进我们的程序之右值引用
摘要:本次主要讲c++11中的右值引用,后面还会讲到右值引用如何结合std::move优化我们的程序。c++11增加了一个新的类型,称作右值引用(R-value reference),标记为T &&,说到右值引用类型之前先要了解什么是左值和右值。左值具名,对应指定内存域,可访问;右值不具名,不对应内存域,不可访问。临时对像是右值。左值可处于等号左边,右值只能放在等号右边。区分表达式的左右值属性有一个简便方法:若可对表达式用 & 符取址,则为左值,否则为右值。1.简单的赋值语句如:int i = 0;在这条语句中,i 是左值,0 是临时值,就是右值。在下面的代码中,i 可以被引 阅读全文

posted @ 2013-10-15 11:45 qicosmos(江南) 阅读(9119) 评论(2) 推荐(4)

(原创)一个简洁通用的调用DLL函数的帮助类
摘要:本次介绍一种调用dll函数的通用简洁的方法,消除了原来调用方式的重复与繁琐,使得我们调用dll函数的方式更加方便简洁。用过dll的人会发现c++中调用dll中的函数有点繁琐,调用过程是这样的:在加载dll后还要定义一个对应的函数指针类型,再调用GetProcAddress获取函数地址,再转成函数... 阅读全文

posted @ 2013-10-12 22:48 qicosmos(江南) 阅读(5036) 评论(8) 推荐(1)

无环的visitor模式
摘要:无环的访问者模式,是来改进原有访问者模式的不足之处的,是Robert C. Martin首次提出的。我们知道访问者模式的优点是为被访问继承体系动态添加行为,而无须改变继承体系。但是GOF访问者模式的缺点是形成了一个循环依赖,强烈的耦合了两个继承体系,使得我们修改任何一方都会对另一方造成影响,所以GOF提出,被访问者的继承体系必须是稳定的,否则,一旦被访问的继承体系修改了,两边都要改。GOF访问者模式的UML类图。从图中可以看到循环依赖,一旦被访者体系发生变化,则访问者体系就要修改,这是难以接受的。 Robert C. Martin提出了一种无环的访问者模式来改进原有的不足,通过改进后,循... 阅读全文

posted @ 2013-10-08 15:30 qicosmos(江南) 阅读(2301) 评论(0) 推荐(1)

导航