昨天的帖子《C++ 对象是怎么死的?进程篇》,在谈到全局对象的析构顺序史,举了一个“在析构函数中使用 cout”的例子(代码详见原文)。当时的本意是想说明:全局对象的析构顺序是不确定的,最好不要在程序逻辑中依赖这个顺序(免得出现移植问题)。
没成想该帖子引来热烈的评论(俺有点受宠若惊了),关注的焦点主要集中在:“cout 是否会最后析构”。有些网友质疑我所提到的有关 VC6 的行为;有网友引用了《TCPPPL》上的相关章节(21.5.2)来说明“cout 会最先构造、最后析构”。既然大伙儿对标准流类库的构造和析构挺有兴趣,咱们今天就针对这个话题补充说明一下。
C++ 对象是怎么死的?为什么要写这个系列?
要说 C++ 对象是怎么死的,得先从 C++ 的析构函数说起。这玩意儿是我本人很喜欢的一个语言特性(可惜有好几个语言没有类似的玩意儿,具体就不点名了,免得引发口水战)。我们可以利用 C++ 的构造和析构函数,来实现 Guard 模式,写出比较清晰、简练和异常安全的代码。由于 Guard 模式在 C++ 程序中运用挺多,所以保证【所有对象被析构】就是一个很重要很严肃的问题。
2009年2月25日
C++ 对象是怎么死的?进程篇
我承认这个帖子的名称有标题党的嫌疑,但是暂时想不出更好的名称了,只好先这样了 :-(
由于前天的帖子聊了架构设计的多进程问题,所以今天想起来要聊一下与“C++进程终止”相关的那些事。与前几个 C++ 帖子的风格类似,今天聊的内容,尽量局限于标准 C++ 范畴,尽量不涉及特定的操作系统平台。
由于前天的帖子聊了架构设计的多进程问题,所以今天想起来要聊一下与“C++进程终止”相关的那些事。与前几个 C++ 帖子的风格类似,今天聊的内容,尽量局限于标准 C++ 范畴,尽量不涉及特定的操作系统平台。
2009年2月24日
2009年2月22日
架构设计:进程还是线程?是一个问题!
就像莎士比亚的“To be, or not to be, that is the question”始终困扰着哈姆雷特,对于“进程还是线程?”这个问题,也经常困扰着那些进行软件架构设计的家伙。所以今天打算聊一下我对这个问题的体会。假如你还搞不清楚线程和进程的区别,请先找本操作系统原理的书好好拜读一下,再回来看帖。
由于这个问题很容易引发口水战,事先声明如下:多进程和多线程,无法一概而论地说谁比谁好。因此本帖主要描述特定场景(与我所负责的产品相关)下,进程和线程的权衡经验,仅供大伙儿参考。
由于这个问题很容易引发口水战,事先声明如下:多进程和多线程,无法一概而论地说谁比谁好。因此本帖主要描述特定场景(与我所负责的产品相关)下,进程和线程的权衡经验,仅供大伙儿参考。
2009年2月19日
学习技术的三部曲:WHAT、HOW、WHY
最近几天有些网友在邮件里面问我关于学习的问题。有好几个人觉得工作了几年,也学会了不少的类库、框架、甚至语言,但是感觉自己的能力没有太大的提高。因此今天来说一下我个人对这方面的体会,希望对大伙儿(尤其是新手)有帮助。
先声明一下,本帖子讨论的三部曲是指你已经选定了某个技术方向之后,该如何学习;至于如何选定技术方向,则属于另一个话题,不在今天的讨论之列。
我把学习归类为三个步骤:What、How、Why。经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在 WHAT 阶段。下面我把这三个步骤解释一下。
先声明一下,本帖子讨论的三部曲是指你已经选定了某个技术方向之后,该如何学习;至于如何选定技术方向,则属于另一个话题,不在今天的讨论之列。
我把学习归类为三个步骤:What、How、Why。经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在 WHAT 阶段。下面我把这三个步骤解释一下。
2009年2月17日
软件工程进阶之每日构建[2]:准备工作
上一个帖子务虚了一下每日构建的几个主要好处。今天开始来说点实在的:也就是每日构建具体要如何开始搞,要做哪些准备工作(如果你所在的团队已经在用每日构建,你可以跳过这个帖子)。
2009年2月16日
软件工程进阶之每日构建[1]:好处和优点
上一个帖子《软件工程进阶之每日构建[0]:概述》提到说每日构建是一种很牛X的软件工程手段。本帖子就来说说它到底有多牛X。为了加深大伙儿的印象,俺先来说一些陈年往事。
软件工程进阶之每日构建[0]:概述
在昨天的帖子《正确地做事(善用工具)》里提到了代码提交频度的问题。当时俺特别强调了【要保证提交的代码能编译通过】,理由是“对于每日构建很重要”。估计列位看官中,不太熟悉【每日构建】的,大有人在;而且国内停留在手工作坊阶段的软件公司,为数也不少。因此今天咱们就来说一下“每日构建”这个话题。假如你平时已经很善于运用“每日构建”这一有效的手段,可以直接略过本系列,去看其它帖子。
2009年2月15日
如何成为优秀开发人员[6]:正确地做事(善用工具)
俗话说“工欲善其事,必先利其器”,今天我们来说说和开发工具有关的话题。由于开发过程中会用到的工具多种多样,根据“二八原理”,我只挑选和开发最密切相关的少数几种工具来聊一聊。
如何成为优秀开发人员[5]:正确地做事(概述)
2009年2月13日
2009年2月12日
2009年2月10日
无处不在的二八原理[1]:在软件开发中的应用
上次聊了《什么是二八原理》,接下来得说说如何运用了。由于本博客主要谈 IT 技术,显然要先来说说和程序员有关的那些事。为了不至于太抽象,咱们以“开发文本编辑器”为例(这玩意大伙儿都熟悉,省得费口水解释),来说说不同职责的开发人员在开发过程中该如何具体运用二八原理。
2009年2月9日
无处不在的二八原理[0]:什么是二八原理
估计看俺博客的人里面,应该有很多人听说过二八原理(如果你之前从来没听说过,那你的知识面有太窄的嫌疑)。但是知道二八原理的人有很多却不会(或者不善于)运用。直接的后果就是你在各种事情上付出了很多时间与精力,但是回报却很少。鉴于该原理非常非常的实用,俺打算专门写一个系列来聊聊和它相关的话题。
2009年2月7日
2009年2月5日
2009年2月4日
Java 新手的通病[3]:缺少良好的编程习惯
上次聊了“缺乏面向对象基本功”,今天来说说编程习惯的问题。今天说的这些坏习惯大部分都是跨语言的(C++、Python 新手也有),而且大部分都需要靠平时不断地努力才能慢慢改掉。
2009年2月2日
学会透过现象看本质,即使现象有时候挺诡异
最近看到一个【汽车对冰淇淋过敏】的小故事(原文在此),转述如下:
某汽车公司收到投诉信,用户抱怨了一个匪夷所思的经历:
他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常发动。天天如此。该用户怀疑这款汽车是否对香草冰淇淋过敏。
2009年2月1日
从 Google 搜索的严重 bug 想开去
昨天晚上用 Google 查资料,看到所有的搜索结果都注明是恶意站点。第一反应以为自己眼花了;然后开始怀疑我的浏览器出问题,换了几个浏览器都是老样子;后来又想,会不会是我的 ISP 在搞鬼。等了十多分钟没解决,只好换百度查资料...