default construction
- 4种情况下编译器会构造出nontrivial(有用)的构造函数
- 带有default construction的member class object
我们有两个class:
class Foo { public: Foo(), Foo(int) … };
class Bar { public: Foo foo; char *str;};- 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):
Bar() { foo.Foo::Foo(); } - 当我们自己定义了Bar一个或以上的构造函数时,编译器会为我们扩张
每一个构造函数。比如我们自己定义:
Bar() { str = 0;}
则编译器就为我们扩张成:
Bar() { foo.Foo::Foo(); str = 0; } - 当有多个需要初始化的成员时,编译器会按照成员的声明次序来初始化成员
- 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):
- 带有default construction的base class
- 声明或继承一个virtual function的class
- 一个virtual function table 会被编译器产生出来,内放class的virtual function 地址。
- 在每个class object中,一个额外的pointer member(vptr)会被编译器合成出来,内含
相关的class vtbl的地址。
- 带有一个virtual base class的class
对于virtual base class中的成员变量,derived class通过存放一个指针,指针中存放
着对应的基类,用这样的方式来访问virtual base class中的成员变量。
所以为了初始化这些指针,编译器会默认构造出或扩张nontrivial构造函数做这些初
始化的工作。
- 带有default construction的member class object
- c++新手常见的两个误解
- 任何class如果没有定义default constructor,就会被合成出来。
- 编译器合成出来的default constructor会明确设定class内每个
datamember的默认值。
这两个没有一个是真的
default construction的更多相关文章
- Thinking in Java——笔记(18)
I/O The original byte-oriented library was supplemented with char-oriented, Unicode-based I/O classe ...
- 【Spring源码解析】—— 依赖注入结合SpringMVC Demo-xml配置理解
在IOC容器初始化的梳理之后,对依赖注入做一个总结,就是bean实例化的过程,bean的定义有两种方式,一种是xml文件配置,一种是注解,这里是对xml配置文件的依赖注入的介绍,后续对bean与该部分 ...
- pl-svo代码解读
pl-svo是在svo的基础上结合点和线特征的半直接法视觉里程计 程序启动通过app文件夹下的run_pipeline.cpp主程序启动,其它的函数文件统一放在src文件夹下,我们先从run_pipe ...
- C++ Core Guidelines
C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very ...
- C++ std::thread
std::thread Defined in header class thread The class thread represents a single thread of execution. ...
- Java - this的使用方法
this在内部获得当前对象的引用时调用: (1) return返回当前对象; (2) 构造器调用还有一个构造器, 带參数; (3) 參数的名称和数据成员的名称同样; 注意: this构造器在方法中仅仅 ...
- IoC 之加载 Bean:总结
上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化 ...
- Havok Physics 2012(2)
目录 Havok Physics 2012 Chapter 2. Creating a Simulation 创建一个模拟世界 1. Creating Physics 2012 Objects Hav ...
- C++11智能指针之std::unique_ptr
C++11智能指针之std::unique_ptr uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...
随机推荐
- Linux下修改IP、DNS、路由命令行设置
本文最后修改时间:20180313 一.快速修改,重启后设置就没了 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add defa ...
- HTTP的Referrer和Referrer Policy设置
Referrer referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以 ...
- python第九天----今天来晚了!
作业 1. HAproxy配置文件操作1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除 ...
- 【第一篇】SAP ABAP7.5x新语法之预定义数据结构
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之预定义数据结构 前 ...
- domain or business logic
Here are a few of the questions you should ask when writing business logic: ¡Do you fully understand ...
- leetcode 5. Longest Palindromic Substring [java]
public String longestPalindrome(String s) { String rs = ""; int res = 0; for(int i = 0; i& ...
- 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!
本篇先以日历形式回顾秋招之路,方便各位参考某厂的处理进度:然后是总结归纳春秋招Java面试题库:最后做个总结还有展望,开始新的征程~ 面试经历京东面试真题面试经验分享1.面试经历 2018年的冬季特别 ...
- flush privileges 什么意思
mysql> update mysql.user set password=PASSWORD(‘新密码’) where User=’root’; mysql> flush privile ...
- 控件_CheckBox(多选按钮)
import android.os.Bundle; import android.app.Activity; import android.widget.CheckBox; import androi ...
- vlookup函数应用
筛选状态下的复制粘贴 第一步 原数据 第二步 筛选内容 第三步 使用vlookup '=VLOOKUP(A1,$A\(1:\)A$19,1,0)' 第四步 往下拖拉结果 最终结果