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


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

     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内容。

  • 相关阅读:
    黑马程序员——网络编程
    黑马程序员——File类
    黑马程序员——java IO流
    黑马程序员——java集合框架(Map和工具类)
    黑马程序员——java集合框架之List,Set
    黑马程序员——对线程的一些总结
    黑马程序员——创建线程的两种方式
    java对象的初始化过程
    黑马程序员——java环境变量path和classpath
    JavaScriptoo:以更好的方式选择JS库
  • 原文地址:https://www.cnblogs.com/chip/p/4764762.html
Copyright © 2020-2023  润新知