欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

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

发布时间:2025/3/21 c/c++ 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++ Primer 5th笔记(chap 13 拷贝控制)析构函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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 拷贝控制)析构函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。