1. 特征

  • 类的一个成员函数
  • 名字由波浪号接类名构成
  • 没有返回值
  • 不接受参数
  • 不能被重载,对于一个给定的类,只会有一个析构函数
class Foo{public:~Foo();
}

2. 析构函数的几个重要特征

  • 析构函数体自身并不直接销毁成员
  • 成员是在编译器在析构函数体之后隐含的析构阶段被销毁的
  • 析构函数首先执行函数体,然后按照成员初始化的逆序顺序来销毁成员。

3. 析构函数的调用时机

  • 无论何时一个对象被销毁,就会自动调用其析构函数
  • 变量离开其作用域时被销毁。
  • 当一个对象被销毁,其成员也将被销毁。
  • 容器(无论是标准容器还是数组)被销毁时,其元素也将被销毁。
  • 对于动态分配的对象,当对指向它的指针引用 delete 时运算符时被销毁。
  • 对于临时对象,当创建它的完整表达式结束时被销毁。
//新的局部作用域
{Sales_data *p = new Sales_data(); auto p2 =  make_shared<Sales_data>();Sales_data item(*p);vector<Sales_data> vec;vec.push_back(*p2);delete p;   //对p指向的对象执行析构函数
}   //退出局部作用域,对p2,item,vec,调用析构函数//销毁p2会递减其引用计数,如果引用计数变为0,对象被释放//销毁vec,也会将其内部的元素销毁

4. 合成析构函数synthesized destructor

当一个类未定义自己的析构函数,编译器会为它定义一个合成析构函数。合成析构函数的函数体是空的。

C++ Primer 5th笔记(chap 13 拷贝控制)析构函数相关推荐

  1. C++ Primer 5th笔记(chap 13 拷贝控制)合成的移动操作

    1. 出现条件 只有当一个类没有定义任何自己版本的拷贝控制成员,且类的每个非 static 数据成员都可以移动,编译器才会为它合成构造函数或移动赋值运算符. struc X{int i;std::st ...

  2. C++ Primer 5th笔记(chap 13 拷贝控制)三五法则

    1. 三个基本操作可以控制类的拷贝操作 • 拷贝构造函数 • 拷贝赋值运算符 • 析构函数. 新标准还有2个函数: • 移动构造函数(move constructor) • 移动赋值运算符(move- ...

  3. C++ Primer 5th笔记(chap 13 拷贝控制)阻止拷贝

    对于一些类来说,拷贝操作是没有意义的,例如 iostream 类阻止了拷贝,以避免多个对象写入或读取相同的 IO 缓冲. 1. 删除函数deleted function 1.1 定义 通过在函数的参数 ...

  4. C++ Primer 5th笔记(chap 13 拷贝控制)=default

    可以将拷贝控制成员函数定义为 =default 来显示地要求编译器生成合成版本. class Sales_data{public:Sales_data() = default;Sales_data(c ...

  5. C++ Primer 5th笔记(chap 13 拷贝控制) 实例2内存管理

    1. 目标 实现标准库vector类的一个简化版本,只支持string,我们命名为StrVec. 2. 设计思想 2.1 allocator管理每个StrVec对象的内存池, 是一块连续的内存(类型为 ...

  6. C++ Primer 5th笔记(chap 13 拷贝控制)引用限定符

    1. 问题 关于右值和左值引用成员函数,通常在一个对象上调用成员函数,而不管对象是一个左值还是一个右值: string s1 = "a value",s2 = "anot ...

  7. C++ Primer 5th笔记(chap 13 拷贝控制)实例1

    1. Folder和Message的类设计 2. Messager.h class Message {friend void swap(Message&, Message&);frie ...

  8. C++ Primer 5th笔记(chap 13 拷贝控制) 对象移动

    1. 为什么要有对象移动 使用移动而非拷贝对象能够大大提升性能. 一些不能被共享的资源类的对象不能拷贝但是可以移动.eg. IO 类 unique_ptr 类 2. 如何做到对象移动 2.1 什么是右 ...

  9. C++ Primer 5th笔记(chap 13 拷贝控制)移动构造和移动赋值

    1. 移动构造函数和移动赋值运算符 一般来说,拷贝一个资源会导致一些额外的开销.在这种拷贝并非必要的情况下,定义了移动构造函数和移动赋值运算符的类就可以避免此问题. eg. StrVec::StrVe ...

  10. C++ Primer 5th笔记(chap 13 拷贝控制)交换操作

    1. 类对象的交换赋值 Hasptr.h class Hasptr {public: Hasptr(const std::string &s = std::string()):ps(new s ...

最新文章

  1. SZUACM集训字符串基础总结: 字符串最小表示 ,KMP, EXKMP, Manracher, Trie树,字符串的hash; 附带一写常见的运用技巧,邝斌大佬的板子和例题[持续更新]
  2. python 创建txt文件并写入字符串-Python将字节字符串写入文件
  3. 如果用编程语言参加战争,哪门语言才是程序员的最强武器?
  4. 小程序真机测试「启动参数」解析出错问题
  5. 震惊,用了这么多年的 CPU 利用率,其实是错的
  6. 跨境电商站外引流?FB必不可少!
  7. 康熙通宝铜钱值多少钱?
  8. Selenium之Chrome浏览器的启动问题及解决
  9. java函数调用实例_Java使用方法引用实现任意对象的实例方法
  10. 和nptf螺纹一样吗_常用数控加工计算公式和最全螺纹标准
  11. 2.2TextCNN
  12. Flutter自定义布局套路
  13. mysql如何彻底卸载_windows如何彻底卸载mysql
  14. PCA主成分分析去噪与降维
  15. linux 关机流程 init exit,Linux开关机命令(shutdown,reboot,halt,init),haltinit
  16. ES6 对象数组查找某一个对象
  17. python数据爬取并可视化代码,python爬取摩拜单车API数据并做可视化分析(源码)...
  18. 关于彭先生和我的未来呀~
  19. 用c语言编写打印机输出程序,C语言编写银行打印程序实例参考
  20. NDN-lite 命名数据网络 -----第二章:对Interest和Data包的处理

热门文章

  1. 【Python】青少年蓝桥杯_每日一题_8.11_画二叉树
  2. Java 洛谷 P1909 买铅笔讲解
  3. j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」
  4. mysql主主keepalived_MySQL主主复制以及使用keepalived保证高可用
  5. harmonyos 2.0怎么升级,HarmonyOS 2.0正式发布 分布式能力获得全面升级
  6. name optimize is not defined 怎么解决_Web前端:怎么在JavaScript中比较对象?
  7. 涉密机房建设方案如何规划?
  8. UPS技术的“前世今生”【基础篇.PPT】
  9. 关于数据中心的选址大全
  10. ML:MLOps系列讲解之《MLOps的State(工具和框架)》解读