别怕Linux编程

Google C++编程规范 – 第二十九条 -《在构造函数中做事情》

本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn

文章作者为roc wu

==

【规范】

应该尽量避免在构造函数中做太多的事情,特别是那些有可能会失败的事情。

【支持在构造函数中做事情的人】

在构造函数中,不用再另外定一个initialize函数,直接在构造函数中写就可以,会很方便。而且,你还不用担心类的对象是不是已经调用过initialize方法了。因为构造函数帮我做了初始化的事情。

【反对在构造函数中做事情的人】

在构造函数中做事情,主要的问题在于:

  1. 对于构造函数来说,很难向外报告错误(抛出异常是目前来看仅有的可行方案);
  2. 构造函数中要做的事情一旦失败了,那这个对象将处于一个不确定的状态;
  3. 如果在构造函数中还调用了虚方法,那么这个虚方法是不会被准确调用的;
  4. 假如有些人用这个构造函数所在的类声明了一个全局变量,那就意味着构造函数中的事情将在main函数之前被执行,这可能会破坏一些既定的假设。比如在此时gflags可能还没有被初始化。

【结论】

构造函数中绝不应该调用虚函数,也不应该调用那些可能出错(尤其是非致命性错误)的语句。如果某个对象不可避免的要在初始化阶段做一些事情,请考虑使用工厂函数或者自己编写Init方法。

谢谢!

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *