文档开发者中心
我的

C++对象模型之构造与析构

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

点赞
收藏
回复
6
分享
举报
浏览799 编辑于2019-10-25 02:08未知归属地
全部评论
最多点赞
最新发布
最早发布

关联阅读:C++对象模型之Alignment

6楼回复于2019-10-25 02:02 未知归属地

关联阅读:C++11 中的左值、右值和将亡值

5楼回复于2019-10-25 02:02 未知归属地

关联阅读:c++ 算法库总结

4楼回复于2019-10-25 02:01 未知归属地

关联阅读:C++ POD对象

3楼回复于2019-10-25 02:01 未知归属地

作者的其它文章同样见楼下哦!

2楼回复于2019-10-25 02:00 未知归属地

C++对象模型的知识点,关于构造与析构……

1楼回复于2019-10-25 02:00 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

目录 收起
构造函数
什么类没有构造函数
了解社区公约,与您携手共创和谐专业的开发者社区。