码迷,mamicode.com
首页 > 其他好文 > 详细

条款4:确定对象被使用前已被初始化(Make sure that objects are initialized before they're used)

时间:2015-08-27 22:58:54      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

其实 无论学何种语言 ,还是觉得要养成先声明后使用,先初始化再使用。

 1.永远在使用对象之前先将其初始化。

    内置类型: 必须手工完成。

    内置类型以外的:使用构造函数完成。确保每一个构造函数都将对象的一个成员初始化。

   shit!!读到这,以前一直以为有些概念独自觉悟到的,大牛们也有这样的想法!!!!

  2.区分开assignment & initialization(这个需要再看看,似乎以前的认知是错误的!!!!)

     initializatin:在default构造函数时才是对非内置类型做初始化。

    assignment: 非default构造函数只是对成员变量赋值操作。

     一定要把user-defined types 成员变量列在“成员初值列表“中。为了记忆,内置类型也要放入初值列中。

  3.成员初始化次序

     base classes ==> derived classes ==>class 的成员变量以声明次序被初始化。

  4.non-local static 对象:

   static对象的生命周期,自创造开始直至程序结束。

   local static 对象是指:作用域在函数内的static object。非函数的作用域对象都是non-local static 对象,比如:file/global/namespace/classs...内的static对象。

   编译单元(translation unit):就是单一源码文件+#include files(即头文件)

  对于定义在不同编译单元内的non-local static 对象 的初始化次序并无明确定义 《====这个问题需要克服解决,于是有了已经下技术。

   本质是使用local static object 替代 non -local static object 

  就是把non-local static object 放到function中,由调用函数(返回一个reference 指向local static object)代替直接使用non-local static object。

   其实,自己在函数内部初始化了这个local static object。而且如果实际没有用到这个对象,也自然不会引起构造、析构成本。

   eg:

        class FileSystem{......};

        FileSystem& tfs()

        {

              static FileSystem fs;

               return  fs;

        }

 

         class Directory{.....};

          Directory::Directory(params)

         {

          ....

           std::size_t disks = tfs().numDisks();

          ....

          }

         Directory& tempDir()

       {

               static Directroy td;

               return td;

      }

 

          为了对象初始化前使用它,要做到:  

            1.手工初始化内置型non-member对象。

            2.使用成员初始值列(member initialization lists)初始化对象的所有成分。

            3.若”初始化次序不确定性“,把non-local  static object 利用函数 化为 local static object

          以上三点也是NOTE内容。

 

条款4:确定对象被使用前已被初始化(Make sure that objects are initialized before they're used)

标签:

原文地址:http://www.cnblogs.com/chip/p/4764762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!