ScopeGuard的作用是确保资源面对异常时总能被成功释放,就算没有正常返回.惯用法让我们在构造函数里获取资源,当因为异常或者正常作用域结束,那么在析构函数里释放资源.总是能释放资源.如果没有异常抛出则正常结束,只是有异常发生或者没有正常退出时释放资源.关于ScopeGaurd的概念想多了解一点的童鞋点这里和这里.c#中的ScopeGuard比较简单,通过using初始化或者通过finally就可以做到,c++中需要自己去实现. c++中设计ScopeGuard的关键技术:通过局部变量析构函数…
本次要讲的是如何通过泛型函数来简化我们的程序. 泛型函数除了之前介绍的一些优点外还有两个重要的优点 1.消除重复逻辑,提高程序的内聚性和健壮性 泛型函数在某种程度上用来弥补泛型类型的不足.通过泛型类型T可以消除一些重复代码,当不同的类型具有相同的行为时,通过泛型擦除类型,达到消除重复简化代码的目的.例如: template<typename T> auto Add(T a, T b)->decltype(a+b) { return a + b; } void TestAdd() { au…
这次要讲的内容是:c++11中的tuple(元组).tuple看似简单,其实它是简约而不简单,可以说它是c++11中一个既简单又复杂的东东,关于它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难. tuple是一个固定大小的不同类型值的集合,是泛化的std::pair.和c#中的tuple类似,但是比c#中的tuple强大得多.我们也可以把他当做一个通用的结构体来用,不需要创建结构体又获取结构体的特征,在某些情况下可以取代结构体使程序更简洁,直观. 基本…
这次要讲的内容是:c++11中的lamda表达式. lamda表达式是我最喜欢的一个c++11特性之一,在我的代码中随处可见它的身影,其实在c#3.5中就引入了lamda,java中至今还没引入,要等明年的java8中才有lamda表达式,lamda来源于函数式编程的概念,也是现代编程语言的一个特点.c++11这次终于把lamda加进来了.也许有人要问,lamda有什么好处,为什么要加到c++中来?lamda表达式有这些优点: 声明式编程风格:就地匿名定义你的目标函数或函数对象,不需要额外的写一…
这次要讲的是:c++11统一初始化.统一begin()/end()和for-loop循环如何简化我们的程序 初始化列表 c++11之前有各种各样的初始化语法,有时候初始化的时候还挺麻烦,比较典型的如vector和map的初始化. vector<int> v; ;i<;i++) { v.push_back(i); } map<int,int> map; ;i<;i++) { map.insert(make_pair(i,i)); } 这种写法比较繁琐,而且不够直观.现在c…
这次要讲的是:C++11如何通过组合函数来简化我们的程序.关于组合函数,大家可能对这个概念有点陌生.组合函数是将N个一元函数组成一种更复杂的函数,每个函数的返回值作为参数传给下一个函数,直到传到最后一个函数结束.这种组合函数的能力可以使我们以一种更直观的方式去完成复杂的链式执行行为.例如有三个函数: int f(int x), int g(int y), int h(int z) 依次调用三个函数 int a,b,c,parm; a = f(parm); b = g(a); c = h(b);…
C++11在很多方面可以简化我们的程序开发,我会在“简化我们的程序”这一系列的博文中一一讲到,敬请关注.这次要讲的是:C++11如何通过获取函数模板的返回值类型来简化我们的程序.在谈到简化之前,我们先看一个问题,这个问题也是我前段时间在开发C++版本的linq时遇到的.假设我们现在需要将集合按某种属性分组,就是类似于sql语句中的group by,我们知道group by后面的字段会组成一个唯一的键,得到的结果是按照这个唯一键值的分组.关于group by具体看一个例子就清楚了. struct…
我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进,我们的模式变得更通用.更简洁.更强大.本次讲如何改进单例模式. 在c++11之前,我们写单例模式的时候会遇到一个问题,就是多种类型的单例可能需要创建多个类型的单例,主要是因为创建单例对象的构造函数无法统一,各个类型的形参不尽相同,导致我们不容易做一个所有类型都通用的单例.现在c+11帮助我们解决了这…
——原创,引用请附带博客地址 2019-12-06 23:42:18 这篇文章分析的还是不行,先暂时放在这以后再更新. 本篇比较长,需要耐心阅读 以一个实际问题开始分析 class Sub{} Sub GetInstance(){ return Sub(); } int main(){ Sub a=GetInstance(); .... //////////////////////////////////////////////////////////////////// [分析]:例子比较简易…
goldengate从11.2升级到12.1.2 1.停止抽取进程 GGSCI (001.oracle.drs.dc.com) 286> stop EXTSJ01 2. 停止投递和复制进程 等待投递进程传输完和复制进程加载完毕.当投递进程的Write Checkpoint #1的Sequence和RBA和复制进程的 Current CHECKPOINT的Sequence和RBA相同时表示已同步完毕 2.1检查投递进程: GGSCI (001.oracle.drs.dc.com) 202> in…