zoukankan      html  css  js  c++  java
  • effective c++条款04确定对象使用前已经被初始化

    对于内置类型以外的任何东西,初始化责任落在构造函数身上,规则很简单:确保每一个构造函数都将对象的每一个成员初始化。但有的时候我们容易混淆了赋值和初始化举一个简单的例子:

    class Name
    {
    public:
            Name(std::string n);
            ~Name();
    private:
            std::string name;
    
    };
    Name::Name(std::string n)
    {
        name=n;  //这并非初始化,而是赋值。
    }
    Name::Name(std::string n):name(n)  //真正意义上的初始化
    {
    
    }

    另外,构造函数的参数初始化列表顺序并不能代表实际成员的初始化顺序,实际成员初始化顺序按声明的顺序。
    2.对于不同编译单元我们如何确定在使用前出初始化?将non-local static 转化为 local static。

    lass FileSystem
    {
    public:
        std::size_t numDisks() const;
    };
    extern FileSystem tfs;
    
    FileSystem& tfs()
    {
        static FileSystem fs;
        return fs;
    }
    
    Directory::Directory(params)
    {
        std::size_t disks = tfs().numDisks();
        std::size_t disks2 = tfs.numDisks(); //不能确定tfs在使用时已经进行初始化
    }
  • 相关阅读:
    IP通信02
    h5网页 微信分享给好友,朋友圈-tp5
    微博常用链接
    Sublime Text3之安裝Emmet及使用技巧
    JS 写入到文件
    PHP之httpRequest
    图片上传预览
    滚动数字时钟
    旋转
    创建JavaScript标准对象--面试经常遇到的问题
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3042989.html
Copyright © 2011-2022 走看看