摘要:
[译文]Protocol Buffers:Google 的数据交换格式Jul 09北极程序设计Open Source,Protocol Buffers2 Comments×原文地址:Protocol Buffers: Google’s Data Interchange Format本文地址:http://migege.com/archives/protocol-buffers-googles-data.html由 北极冰仔 翻译,转载请以超级链接的形式注明本文地址。在 Google,我们的任务是将全世界的所有信息进行组织。毫不夸张地,我们使用成千上万种不同的数据格式来描述服务器之间的 阅读全文
摘要:
Boost.Asio和ACE之间关于Socket编程的比较ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。 最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。boost::asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组 阅读全文
摘要:
对象生死劫 - 构造函数和析构函数的异常构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的对象和已分配的内存。在对象生死攸关的地方,如果程序代码出现问题,常常会发生内存泄漏,从而产生可能危害系统运行的孤魂野鬼。大量的事实表明,业务逻辑代码写得非常严谨的程序在运行中仍然发现存在内存泄露,大都是构造和析构部分的代码存在问题。而许多程序员都习惯于面向对象的编程,需要时就建立一个对象,不用时就将其释放。这样的习惯简化了我们 阅读全文
摘要:
第17条: 要在单独的语句中使用智能指针来存储由new创建的对象假设这里有一个函数用来显示处理优先级,另一个函数根据当前优先级为一个动态分配的 Widget 做一些处理: int priority(); void processWidget(std::tr1::shared_ptr pw, int priority); 一定要时刻记住“使用对象管理资源”这一真理(参见第 13 条)。 processWidget 中可以使用智能指针来动态分配其需要处理的 Widget 。 下面是对 progressWidget 的一次调用: processWidget(new Widget, priority( 阅读全文
摘要:
Boost智能指针——shared_ptrboost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include#include #include class implementation{public:~implementation() { std::cout sp1(new implementation());std::cout sp2 = sp1;std::cout(new imp. 阅读全文
摘要:
Boost智能指针——weak_ptr循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下: #include #include #include #include class parent;class children;typedef boost::shared_ptr parent_ptr;typedef boost::shared_ptr children_ptr;class parent{public:~parent() { std::cout children = son;son->parent = father; 阅读全文