代码改变世界

随笔分类 -  C++

PIMPL(private implementantion)模式(转载)

2017-11-09 20:44 by Dirichlet, 383 阅读, 收藏, 编辑
摘要: 前记:请搜索PIMPL(private implementantion)模式和桥接模式, PIMPL是桥接模式的一种典型实现 以下转自:http://blog.csdn.net/nrc_douningbo/article/details/5935218 进行跨平台的移植工作,这其中有些地方是无法完全 阅读全文

windows中控制台窗口和普通窗口有什么区别?

2017-06-04 18:29 by Dirichlet, 2873 阅读, 收藏, 编辑
摘要: 1. 窗口都是windows标准窗口,有窗口句柄,但是console window没有消息循环,直接从缓冲区读数据,显示数据。 windows中普通窗口都有自己的窗口过程, 我可以使用SetWindowlong来修改窗口过程, 但是控制台窗口修改后去无法收到消息, 都是窗口为什么控制台的不能通过修改 阅读全文

Oracle中根据列名找到所属的表

2017-06-04 17:36 by Dirichlet, 3975 阅读, 收藏, 编辑
摘要: oracle中如何根据一个字段名查找出所属的表名? 用如下语句, select * from user_tab_columns where column_name='列名', 例子:select * from user_tab_columns where column_name='ALWAYS_US 阅读全文

面向对象原则

2017-06-04 17:35 by Dirichlet, 181 阅读, 收藏, 编辑
摘要: 依赖倒置原则 面向接口编程。尽量依赖于接口或抽象类而不是具体类,减少模块和模块之间的耦合。 模块间的依赖是通过接口或者抽象类发生;实现类之间不发生直接的依赖关系,其依赖关系也是通过接口或抽象类产生的; 实现类依赖接口或抽象类。 依赖倒转原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独 阅读全文

迭代器模式

2017-06-04 17:17 by Dirichlet, 274 阅读, 收藏, 编辑
摘要: C#中的IEnumerator实现了一个标准的iterator模式。 Iterator相当于collection对象的一个指针/游标/。 提问:迭代功能直接实现在Collection对象里可以吗?比如用索引下标的方式? 回答:可以,用索引来迭代也是一个好办法。但是这样一来,就不能同时对同一个coll 阅读全文

异常设计总结

2017-06-04 17:03 by Dirichlet, 314 阅读, 收藏, 编辑
摘要: 0. 异常的优点 a. 有堆栈信息,利于定位程序故障。 b. 程序显得整洁,是的正常的业务逻辑和异常处理分开。返回值形式会容易出现层层迭代,返回值检查和正常逻辑混在一起。 c. 异常处理部分可以用于确保资源的释放。Finally, Close 1. 抛出异常 设计一个对外的接口,怎么抛出以及什么时候 阅读全文

COM线程单元

2017-06-04 17:03 by Dirichlet, 312 阅读, 收藏, 编辑
摘要: 节选自C#高级编程 不管是单线程单元还是多线程单元,一个线程只能属于一个单元。 1) 单线程单元(apartment, 寓所,套间) 单线程单元与它拥有的线程是一对一的关系。COM对象在编写时不是线程安全的,也就是说编写COM对象时可以不考虑线程安全,COM库通过消息处理机制帮助实现线程同步。 2) 阅读全文

避免构造/析构函数调用虚函数(转)

2017-06-04 17:02 by Dirichlet, 389 阅读, 收藏, 编辑
摘要: 转自http://hi.baidu.com/richiechyi/item/0f0fe3391443e389f5e4ad91 不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C+ 阅读全文

单例模式完整解析

2017-06-04 17:02 by Dirichlet, 263 阅读, 收藏, 编辑
摘要: volatile, static readonly, double check 直到对象要求产生一个实例才执行实例化;这种方法称为"懒实例化"。懒实例化避免了在应用程序启动时实例化不必要的 singleton。 1. 但是,这种实现的主要缺点是在多线程环境下它是不安全的。如果执行过程的不同线程同时进 阅读全文

COM线程模型 套间概念

2017-06-04 16:53 by Dirichlet, 447 阅读, 收藏, 编辑
摘要: COM线程模型 套间概念 1) 单线程套间。线程是COM主线程,初始化COM库的进程的第一个线程。即使从其他线程访问COM组件,也不需要手工同步,COM库已经实现了同步。寓所线程里有个消息处理循环来处理对COM组件的访问。 2) 单线程套间。线程是不一定是COM主线程。同步机制同上。 3)多线程寓所 阅读全文

Smart pointer 智能指针小总结

2017-06-04 16:52 by Dirichlet, 292 阅读, 收藏, 编辑
摘要: Smart pointer line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数。如果继续用指针访问,会出现如下图的内存访问异常。所以说如果选择了用智能指针,就不要再试图用其他方式再去访问对象了。 阅读全文

Notepad++格式化xml(转)

2014-06-13 11:01 by Dirichlet, 1199 阅读, 收藏, 编辑
摘要: 转自:http://www.herongyang.com/XML/NPP-XML-Tools-Plugin-Download-and-Install.html Downloading and installing Notepad++ is easy. See steps below: 1. Go t 阅读全文

regression build test

2014-04-01 10:27 by Dirichlet, 415 阅读, 收藏, 编辑
摘要: Q: 什么是regression test以及为什么做regression test? A: fixing1进到build之后,QA/tester要进行手动测试,也可能会写automation。但是随后会有很多的其他的fixing进入到build,可能导致之前的fixing不工作了,为了确保之前的f 阅读全文

多继承对象的虚函数表

2013-08-05 22:50 by Dirichlet, 2825 阅读, 收藏, 编辑
摘要: 子对象多重继承自多个基类,每个基类都有虚函数,那么子类对象的内存布局是什么样的?有一个虚函数表还是多个?示例程序: 1 #include "iostream" 2 #include "string" 3 #include 4 using namespace std; 5 6 7 class Base1 8 { 9 public:10 Base1(): x(1){}11 virtual void QueryInterface() { }12 virtual void AddRef(){}13 virtual void Release(){}14 15 pr 阅读全文

COM对象模型

2013-08-05 22:49 by Dirichlet, 350 阅读, 收藏, 编辑
摘要: COM对象内存布局,多继承是虚继承吗? 接口之间怎么切换? 1) 是普通的多继承,不是虚继承。因为父类接口只是含有纯虚函数,不含任何数据成员,所以问题不大。 2) QueryInterface可以用来在COM对象实现的接口之间切换。内部实现可以是表驱动或者用static_cast。 摘自Essent 阅读全文

c++中如何查看一个类的内存布局

2013-08-05 22:48 by Dirichlet, 921 阅读, 收藏, 编辑
摘要: 打开VS command prompt,输入下述命令可以看到对象的内存布局。 cl a.cpp -d1 reportSingleClassLayout[classname] // reportSingleClassLayout和[classname]之间没空格。 参考: http://blog.cs 阅读全文

COM组件双接口对象模型

2013-08-04 14:54 by Dirichlet, 550 阅读, 收藏, 编辑
摘要: 模型如下: 这里COM对象一共实现了三个接口,IUnknown,IDispatch, Ixxx. 每个COM都必须实现IUnknown,不考虑在内的话共实现了IDispatch和自定义接口Ixxx两个,故称双接口对象。 IDispatch主要是给解释型语言脚本用的,因为脚本没办法直接调用多态的接口函 阅读全文

COM组件多接口对象模型

2013-08-04 14:38 by Dirichlet, 1398 阅读, 收藏, 编辑
摘要: COM组件有两种接口类型,Dual and Custom,如下图所示。本文说的是Custom。所谓多接口COM对象是指此COM对象实现了多于一个的自定义接口,即Custom接口。 接口图如下: 需要注意的是最终实现的COM对象用的不是虚继承而是普通的多继承,因为被多继承的IUnknown接口是不含任 阅读全文

C++异常机制的实现方式和开销分析

2013-07-29 14:09 by Dirichlet, 289 阅读, 收藏, 编辑
摘要: 转自:http://baiy.cn/doc/cpp/inside_exception.htm(转载)C++异常机制的实现方式和开销分析白杨http://baiy.cn 在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了。没想到时隔几年以后才有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了解语言中每个特性的实现方式及其时空开销。异常处理由于涉及大量底层内容,向来是 C++ 各种高级机制中较难理解和透彻掌握的部分。本文将在尽量少引入底层细节的 阅读全文

虚继承

2013-07-29 13:05 by Dirichlet, 787 阅读, 收藏, 编辑
摘要: 图例,典型菱形虚继承。 内存布局: 虚子类Left, Right在最上,虚基类在最下面,本质是两个虚子类对象的开始部分都含有一个虚指针指向虚表,虚表里有相对于Top的偏移量。 当做Right,Left指针到Top指针的转换时,需要用到这个偏移量。 Right* right; Left* left; 阅读全文
点击右上角即可分享
微信分享提示