
条款4:确定对象在被使用前已经被初始化
发布日期:2021-05-09 00:20:09
浏览次数:14
分类:博客文章
本文共 993 字,大约阅读时间需要 3 分钟。
需要注意三点:
1.手工初始化内置型的非成员对象
2.使用初始化成员列表对付对象的所有成员
3.对"初始化顺序不确实"的问题要注意自己的设计.
这里重点介绍下第三种的情况:
下面的tfs会在外部文件b.cpp中使用,但是当前这种写法不能够保证tfs在b.cpp中使用时已经被初始化了,这样就会造成问题.
1 //a.h 2 class FileSystem 3 { 4 public: 5 int numDisk() const; 6 }; 7 8 extern FileSystem fs; //只是声明 9 10 //a.cpp11 FileSystem fs; //这里是定义12 13 14 ///b.cpp15 class Directory16 {17 public:18 Directory(string params)19 {20 int disks = fs.numDisks(); //因为a.cpp和b.cpp在编译时并不能保证先后顺序,有可能出现tfs还没有被初始化,就被使用的情况21 }22 };
把tfs声明为一个函数,返回对象的引用,这样b.cpp中去调用时,就能够保证fs一定是初始化了的.不过这里我有个疑问,作者为什么要用静态变量的引用呢?不可以是局部变量吗?或者不使用引用吗?
1 //a.h 2 class FileSystem //库中定义的类 3 { 4 public: 5 int numDisks() const; 6 }; 7 8 //a.cpp 9 FileSystem &tfs()//这样写,表示tfs()是一个全局函数,而非成员函数.10 {11 static FileSystem fs; //C++保证函数中的local static对象会在"该函数被调用期间""首次遇上该对象的定义式"时被初始化.12 return fs;13 }14 15 //b.cpp16 class Directory17 {18 public:19 Directory(string params)20 {21 int disks = tfs().numDisks(); 22 }23 };
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月29日 05时49分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ORACLE 客户端工具
2019-03-05
基于LabVIEW的入门指南
2019-03-05
weblogic之cve-2015-4852
2019-03-05
Java注释
2019-03-05
C++ 函数重载
2019-03-05
.NET微信网页开发之使用微信JS-SDK调用微信扫一扫功能
2019-03-05
使用mybatis-generator生成底层
2019-03-05
Mybatis【5】-- Mybatis多种增删改查那些你会了么?
2019-03-05
计算输入的一句英文语句中单词数
2019-03-05
lvs+keepalive构建高可用集群
2019-03-05
6 个 Linux 运维典型问题
2019-03-05
取消vim打开文件全是黄色方法
2019-03-05
一个系统部署多个tomcat实例
2019-03-05
HP服务器设置iLO
2019-03-05
从头实现一个WPF条形图
2019-03-05
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2019-03-05
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2019-03-05
GLFW 源码 下载-编译-使用/GLAD配置
2019-03-05
针对单个网站的渗透思路
2019-03-05