04——确定对象使用前被初始化

  1. 内置类型手动初始化
  2. 类类型-构造函数(确保构造函数将对象的每个成员都初始化)

类构造函数初始化列表与函数体内赋值的区别:

  • 效率更高
  • 函数内的赋值语句执行时先执行成员的默认构造函数,再执行copy assignment
  • 初始化列表直接执行一次 copy构造函数
  • 含有const成员、reference成员时需使用初始化列表
  • 基类的初始化

成员的初始化次序:

  • 先基类,够派生类
  • class成员的初始化次序为其声明次序

04——确定对象使用前被初始化

时间: 2024-12-26 22:50:04

04——确定对象使用前被初始化的相关文章

条款04 确定对象被使用前已先被初始化

一.概述 手工初始化内置类型对象 构造函数的成员初始化列表 static对象的初始化:包括non-local static和local static 二.细节 1. 你的构造函数使用了成员初始值列表了咩 不使用初始值列表: class A { public: A(const string &s, int i) { //下面都是赋值,而非初始化 s = name; score = i; } private: string name; int score; }; 使用初始值列表: class A {

条款04:确定对象使用前已被初始化

目录 1. 总结 2. 构造函数体 VS 初始化列表 3. 对象的初始化顺序问题 1. 总结 无论是在初始化列表中,还是在构造函数体内,请为内置类型对象进行手工初始化,因为C++不保证初始化它们 最好使用初始化列表进行初始化,而不要在构造函数体中使用赋值:初始化列表最好列出所有的成员变量,其排列顺序应该和它们在class中的声明顺序相同 为了避免"不同源文件内定义的non-local static对象在编译时的初始化顺序"问题,请以local static对象替换non-local s

读书笔记 effective c++ Item4 确保对象被使用前进行初始化

Item4 确保对象被使用前进行初始化 C++在对象的初始化上是变化无常的,例如看下面的例子: Int x; 在一些上下文中,x保证会被初始化成0,在其他一些情况下却不能够保证.看下面的例子: Class Point { Int x,y; }; Point p; P的数据成员有时候保证能够被初始化(成0),有时候却不能.如果你从不存在未初始化对象的语言中转到c++, 就需要注意了,因为这很重要. 使用未初始化对象的坏处 读取未初始化的值会产生未定义的行为.在一些平台中,仅仅读取未初始化的值就会让

effective c++ 条款 04 (对象初始化)整理

确定对象使用前已被初始化 原则:不论是类的成员变量还是其他作用域的变量,使用前都要保证已被初始化(或者说赋值) 一.无任何成员的内置类型初始化 /*内置类型通过复制完成初始化*/ int x = 0; const char* a = "abc"; int a[2] = {0,0}; 二.STL容器初始化 STL容器关注容器大小,防止越界,初始化的工作不用关心 三.类成员变量初始化 参考:http://www.cnblogs.com/BlueTzar/articles/1223169.h

条款47: 确保非局部静态对象在使用前被初始化

class FileSystem { ... }; // 这个类在你 // 的程序库中 FileSystem theFileSystem; // 程序库用户 // 和这个对象交互 ////////////////////////////////////////////////////////// class Directory { // 由程序库的用户创建 public: Directory(); ... }; Directory::Directory() { 通过调用theFileSystem

确保对象在被使用前的初始化

前言 某个对象若不被初始化,意味着它的执行很有可能导致不确定的结果,这是我们的代码所要坚决避免的情况. 本文将讲解 C++ 代码中关于对象初始化的方方面面. 成员变量的初始化 当我们构造一个对象的时候 (不含初始化列表),在进入构造函数之前,其实所有成员变量已经被其所属类型的默认构造函数给初始化了,内置类型则不做任何处理. 因此,如果你想在构造函数里初始化成员变量,这可未必是个好主意.更好的方法应当是在构造函数的成员初始化列表里对成员变量进行初始化,这样可以避免重复的初始化工作.但请记得在列表中

Java对象相关元素的初始化过程

1.类的成员变量.构造函数.成员方法的初始化过程 当一个类使用new关键字来创建新的对象的时候,比如Person per = new Person();JVM根据Person()寻找匹配的类,然后找到这个类相匹配的构造方法,这里是无参构造,如果程序中没有给出任何构造方法,则JVM默认会给出一个无参构造.当创建一个对象的时候一定对调用该类的构造方法,构造方法就是为了对对象的数据进行初始化.JVM会对给这个对象分配内存空间,也就是对类的成员变量进行分配内存空间,如果类中在定义成员变量就赋值的话,就按

Objective-C 编程全解-第04章 对象的类型和动态绑定

第04章 对象的类型和动态绑定 Objective-C的一个重要特征就是动态性,本章将对Objective-C的动态类型(dynamic typing)和动态绑定(dynamic binding)进行说明. 4.1 动态绑定 4.1.1 什么是动态绑定 Objective-C中的消息是在运行时才去绑定的.运行时系统首先会确定接受者的类型(动态类型识别),然后根据消息名在类的方法列表里选择相应的方法执行,如果没有找到就到父类中去继续寻找,假如一直找到NSObject也没有找到就要调用的方法,就会报

整型数组与vector对象之间的相互初始化

#include<iostream> #include<vector> #include<string> using namespace std; int main() { vector<int>::size_type i=0; int arr[10]={0,1,2,3,4,5,6,7,8,9}; //使用整型数组初始化一个vector对象 vector<int> vec(begin(arr),end(arr)); for(auto v:vec)