C++里类有4种特殊的成员函数:
构造函数。
析构函数。
复制函数,包括复制构造函数和复制赋值函数。
移动函数,包括移动构造函数和移动赋值函数。
这些函数的特点是:有些时候,编译器会帮你生成这些函数;有些时候,编译器又会拒绝生成这些函数;还有些时候,编译器还会往你自己写的特殊函数中添加操作。鉴于这些特殊函数的重要性,我们有必要好好了解一下它们背后的故事。
本文介绍的是前两类,构造函数和析构函数。
注1:本文环境为Ubuntu 16.04,gcc5.4.0,使用c++14标准。 注2:本文大量内容来自《深入探索C++对象模型》。
构造函数
什么类没有构造函数
我们知道构造函数是一种非常重要的函数,也是C++诞生的一个主要原因。那么,第一个问题,每个类都有构造函数吗?
对于下面这个平凡类:
struct Trivial {
int64_t x;
int64_t y;};int main() {
Trivial t;
t.x = 1;
t.y = 2;}
main函数对应的汇编指令为(未开任何优化):
00000000004006b6 <main>:
4006b6: 55 push %rbp
4006b7: 48 89 e5 mov %rsp,%rbp
4006ba: 48 c7 45 f0 01 00 00 movq $0x1,-0x10(%rbp)
4006c1: 00
4006c2: 48 c7 45 f8 02 00 00 movq $0x2,-0x8(%rbp)
4006c9: 00
4006ca: b8 00 00 00 00 mov $0x0,————————————————————
BY:HW-WB





































苏公安网备 32011402010933号