effective c++ 04 确定对象被使用前已被初始化

news/2024/11/30 0:42:40/

effective c++ 04 确定对象被使用前已被初始化

在本节中,作者主要强调了对象使用前一定要进行显式的初始化。其中要区分构造函数中的赋值和初始化。另外跨编译模块的初始化问题需要引起注意(通常可以使用单例模式解决)。

分析

使用成员变量初始化列表进行初始化

在构造函数中,下面的形式是赋值:

//01. Assignments
ABEntry::ABEntry(const std::string& name, const std::string& address, const std::list<PhoneNumber>& phones)
{// these are all assignments.theName = name;theAddress = address;thePhones = phones;numTimesConsulted = 0;
}

下面这样的形式才是初始化:

//02. Initialization list.
ABEntry::ABEntry(const std::string& name, const std::string& address, const std::list<PhoneNumber>& phones) :theName(name),theAddress(address),thePhones(phones),numTimesConsulted(0)
{// the ctor body is empty.
}

确保全局变量已经初始化

Directory的对象构造时会调用tfs对象的方法,然而此时tfs可能还没有初始化:

class Directory
{
public:Directory(){std::size_t disks = tfs.numDisks();}
};

总结

  • 为内置型对象进行手工初始化,因为c++不保证初始化它们。
  • 构造函数最好使用成员函数初始化列表进行初始化,而不是在构造函数内部使用赋值操作。初值列列出的成员变量,其排列顺序应该和它们在class中的声明次序相同。
  • 为免除"跨编译单元的初始化次序"问题,请以local static对象提u韩non-local static对象。

http://www.ppmy.cn/news/71320.html

相关文章

idea将java程序打包为jar

idea将java程序打包为jar 灵光一现&#xff1a; 用java拉起浏览器&#xff0c;打开指定的网络地址&#xff0c;省的手动打开浏览器再复制地址过去了 本文记录了使用idea将java程序打包为jar包的过程 源码地址&#xff1a;https://gitcode.net/qq_39339588/jar.git 文章目录 ide…

3面美团测试岗,HR现场直接发20k的offer,我是横着走出来的...

前情提要 这是一个发生在我身上的真实事情&#xff1a; 我工作不到2年&#xff0c;周末在朋友圈发了个喜报&#xff0c;准备入职美团。之后&#xff0c;我的朋友就带着祝福跟我聊了许久&#xff0c;聊天的内容就是具体了解一下我面试的过程&#xff0c;心路历程和未来的打算…

SIT和UAT的区别

软件测试是一个重要的开发活动&#xff0c;它可以帮助确保软件质量并减少缺陷。在软件测试过程中&#xff0c;有两种主要类型的测试&#xff1a;系统集成测试&#xff08;SIT&#xff09;和用户验收测试&#xff08;UAT&#xff09;。本文将讨论这两种测试的区别。 系统集成测…

ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局

ThinkPHP6布局的方式之模板布局 ThinkPHP的模板引擎内置了布局模板功能支持&#xff0c;可以方便的实现模板布局以及布局嵌套功能。 有三种布局模板的支持方式&#xff1a;全局配置方式&#xff0c;模板标签方式&#xff0c;动态方法布局。 第一种方式&#xff1a;全局配置方…

3年测试经验,跳进腾讯,3面终获20K的Offer...

前言 时间过得飞快&#xff0c;一代又一代就这么成长了起来&#xff0c;曾经的95后备受争议&#xff0c;如今的95后进入社会&#xff0c;扮演者各行角色&#xff0c;成为了行业顶梁柱&#xff0c;今天&#xff0c;要分享的是自己的成长经历。今年24岁&#xff0c;毕业之后进入…

Linux利器tmux使用教程总览

文章目录 为什么是tmuxtmux的安装在Ubuntu和Debian上安装Tmux在CentOS和Fedora上安装Tmux在macOS上安装Tmux tmux的基本术语tmux的基本操作使用场景 tmux 是一个终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;非常有用&#xff0c;属于常用的开发工具。本…

拖拽库/模板引擎

uniapp DIY可视化工具 控件拖拽工具怎么开发 答&#xff1a;需要 (**拖拽库**) &#xff08;**模板引擎**&#xff09;代码自动生成 python有哪些模板引擎 Jinja2是一个小型但快速且易于使用的以纯python编写的独立模板引擎&#xff08;最主要的模板&#xff09;Chameleon是T…

CORS跨域资源共享

跨域资源共享(CORS)是一种放宽同源策略的机制&#xff0c;它允许浏览器向跨源服务器&#xff0c;发出请求XMLHttpRequest&#xff08;XHR&#xff09;&#xff0c;从而克服了 AJAX 只能同源使用的限制&#xff0c;以使不同的网站可以跨域获取数据。 那么什么是跨域呢&#xff1…