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云 ...
随机推荐
- genymotion和adb的解决方法
问题: 安装了genymotion后.再单独安装了adb 然后在关闭genymotion后,输入adb devices,下方显示为空,然后打开genymotion,cmd输入adb devices,显 ...
- 自定义合并列:el-table
objectSpanMethod({ row, column, rowIndex, columnIndex }) {//合并规则 //当前行row.当前列column.当前行号rowIndex.当前列 ...
- Python使用np.c_和np.r_实现数组转换成矩阵
# -*- coding: utf-8 -*-"""Created on Sat Jun 30 14:49:22 2018 @author: zhen"&quo ...
- 自己搭建anki同步服务器
最近帮孩子找学习的软件,发现了anki 不过同步速度太慢,但发现可以自己搭建同步服务器 具体方法见https://github.com/dsnopek/anki-sync-server 我的安装过程如 ...
- Java——语句
空语句: ; 符合语句:{} if语句:if () {} else {} break 语句:跳出单层循环 循环语句:for(;;){} do{}while()
- syslog与rsyslog的了解与比较
syslog日志收集器: syslog是早期的centos版本的日志收集器,应该是centos5之前的版本. syslog的两个重要的守护进程: 1.syslogd:system.主要以收集系统服务为 ...
- django中admin
我们在models中建立了表结构,想要在admin中表示: from django.contrib import admin from . import models for table in mod ...
- tcpdump抓包具体分析
Tcpdump抓包分析过程 一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x ...
- DAG 模型 stacking boxes 动态规划
题目:UVA 103 stacking boxes 题目大意: 给你两个数,一个是盒子的个数,一个是每一个盒子的维数.将一个个盒子互相装起来,让你求最多可以装多少个,要求字典序最小. 解析:这个就是盒 ...
- Redis本身是单线程线程安全的内存数据库,但是不代表你的使用就是线程安全的
网上一个错误示例:https://www.cnblogs.com/Simeonwu/p/7881100.html,部分代码如下: package com.me.config; import redis ...