C++定义构造函数必须使用初始化列表的场合
明其理,而知其然也.
先给理论。
1. 初始化 != 赋值.
a.初始化代表为变量分配内存. 变量在其定义处被编译器初始化(编译时). 在函数中, 函数参数初始化发生在函数调用时(运行时).
b.赋值代表"擦除对象当前值, 赋予新值". 它不承担为对象分配内存的义务.
2. C++中, 类成员的初始化于初始化列表中完成, 先于构造函数体执行. 即成员真正的初始化发生在初始化列表中, 而不是构造函数体中.
再给说明。
1. 如果类中有一个成员是一个引用, 由于引用必须给予初始值, 因此, 引用必须使用初始化列表.
2. 同理, const属性必须给予初始值, 必须使用初始化列表.
3. 继承类中调用基类初始化构造函数, 实际上就是先构造基类对象, 必须使用初始化列表.
别的不再说明, 什么时候必须使用初始化列表是很明显的;
另外, 简单的说, 任何时候都鼓励使用初始化列表, 一些别的事情(比如在构造函数中分配资源之类的, 请参考RAII, Resource Acquizition Is Initialization)可以放在构造函数体内完成.
转自:http://zhidao.baidu.com/question/281970379.html
构造、析构顺序:
(1)首先调用基类构造函数;
(2)调用成员对象的构造函数;
(3)自己的构造函数。
析构顺序与上面严格相反!
const int a = 10; //编译器中怎么实现的
分享到:
相关推荐
4. **STL(标准模板库)**:面试中常考察对容器(如vector, list, set, map等)、算法(如排序、查找)、迭代器的理解和使用。 5. **指针与引用**:理解指针的动态内存分配、解引用、指针运算以及引用作为函数参数...
理解const的作用和使用是C++程序员的基本功,而动态内存管理则关系到程序的正确性和效率。对于面向对象的理解,包括封装、继承和多态的原理和实践,是考察开发者能否熟练运用C++的关键。熟悉这些知识点将有助于你在...
13. **设计模式**:虽然不是语言特性,但在面试中常被提及,如单例模式、工厂模式、观察者模式等,了解这些模式可以帮助解决复杂问题。 这些知识点是C++面试中的常见话题,通过深入理解和实践,可以提高面试成功的...
此外,纯虚函数、抽象类、友元函数和异常处理也是面试中常考的面向对象特性。 C++标准库是提升效率的关键工具,例如STL(Standard Template Library)中的容器(如vector、list、set、map等)、迭代器、算法和函数...
2. **内存管理**:面试中常考察内存分配与释放,如动态内存(malloc/calloc/realloc/free)的使用,栈与堆的区别,内存泄漏的识别和预防。 3. **预处理器**:面试可能会涉及宏定义、头文件包含、条件编译等预处理器...
这些知识点涵盖了数据库理论、操作系统、面向对象编程和算法设计等多个领域,是C++开发者需要掌握的基础知识,也是在面试中常被考察的要点。在准备面试时,深入理解并能灵活应用这些概念至关重要。
《C/C++语言面试宝典》是一份针对面试者准备的文档,主要涵盖了C/C++编程语言中的关键知识点,特别是那些在面试中常被问到的内容。这份文档由安徽高新嵌入式教育中心的skyino1整理,旨在帮助求职者提升面试成功率。 ...
内存管理和性能优化也是面试中常被问到的问题。掌握栈与堆的区别,理解深拷贝与浅拷贝,以及何时应该使用智能指针(如shared_ptr、unique_ptr)来避免内存泄漏,都是提升代码质量的关键。 总的来说,《C++笔试面试...
9. 设计模式:面试中常问到的设计模式包括工厂模式、单例模式、观察者模式等,理解它们的工作原理及应用场景。 10. 并发编程:了解线程和进程的基本概念,线程同步和互斥锁,以及条件变量等并发控制机制。 11. C++...
23种GOF设计模式(GoF,Gang of Four)是面试中常被问到的主题,如单例模式、工厂模式、观察者模式、装饰器模式等。理解这些模式并能灵活应用到实际项目中,可以展示出候选人的代码组织能力和系统设计能力。 数据...
在C++方面,面试中常涉及以下知识点: 1. C++基础:包括数据类型、运算符、控制流、函数、类与对象等。 2. 模板与泛型编程:理解模板的工作原理,如何创建和使用函数模板、类模板。 3. 动态内存管理:指针操作、...
文本文件在编程学习中常用来记录代码片段、算法流程或者学习心得,它可能包含了对某些复杂问题的简化解释,或者是对特定算法的注释和优化建议。 通过这两个文件,学习者可以系统地复习和提高数据结构和算法知识,这...
同时,Java的内存管理和垃圾回收机制也是面试中常被问到的话题,深入理解堆栈内存分配以及如何优化内存使用对于提高程序性能至关重要。另外,Java集合框架,如ArrayList、LinkedList、HashMap等,是面试中的热门问题...
11. **操作系统知识**:内存模型、进程与线程的区别、文件系统、I/O模型(阻塞非阻塞、同步异步)等,都是可能被问到的问题。 12. **数据库**:虽然C++不是数据库语言,但在开发中常与数据库交互,了解SQL基础、...
5. **内存管理**:C++提供了对内存的直接控制,包括动态内存分配与释放,理解内存泄漏和野指针等问题及其预防措施是面试中常被问到的话题。 接下来,设计模式是软件工程中的重要工具,C++面试中也会考察应聘者的...
8. **数据结构与算法**:面试中常考察的数据结构包括链表、树(二叉树、红黑树等)、图、堆、队列、栈等,而排序算法(如冒泡、选择、插入、快速、归并等)、查找算法(如二分查找)也是必考内容。 9. **设计模式**...
11. **设计模式**:常见的设计模式如单例、工厂、观察者、装饰者等,是解决特定问题的通用解决方案,面试中常被问及。 12. **数据结构**:包括链表、队列、栈、树(二叉树、AVL树、红黑树等)、图等,了解它们的...
C++是一种强大的、通用的编程语言,被广泛应用于...掌握这些C++的核心概念和技术是成为专业C++开发者的基础,它们不仅在面试中常被考察,也是解决实际问题的关键。不断练习和深入理解,将使你在C++的世界中游刃有余。
7. **设计模式**:面试中常涉及常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式等。理解并能灵活应用这些模式可以展示候选人的抽象思维能力和代码复用意识。 8. **标准库和库函数**:面试者应该熟悉...