C++13.3 析构函数destructor
来源:互联网 发布:ubuntu 桌面壁纸 编辑:程序博客网 时间:2024/06/06 11:02
简介
析构函数写法:~Sale_item(){}
构造函数的一个用途是自动获取资源。例如,构造函数可以分配一个缓冲区或打开一个文件,在构造函数中分配了资源之后,需要一个对应操作自动回收或释放资源,这就是析构函数的功能。
撤销类对象时会自动调用析构函数
=======================================================================================================
- 构造函数的一个用途是自动获取资源。例如,构造函数可以分配一个缓冲区或打开一个文件,在构造函数中分配了资源之后,需要一个对应操作自动回收或释放资源,这就是析构函数的功能。
一、何时调用析构函数
- 撤销类对象时会自动调用析构函数
Sale_item *p=new Sale_item;{ Sale_item item(*p);//新建一个item对象,同时隐式调用复制构造函数将*p复制给item delete p;//删除指向动态对象的指针}//变量在超出作用域时应该自动撤销,因此,当遇到花括号时,将运行item的析构函数。
动态分配的对象只有在指向该对象的指针被删除时才撤销。如果没有删除指向动态对象的指针,则不会运行该对象的析构函数,对象就一直存在,从而导致内存泄露,而且,对象内部使用的任何资源也不会释放。
当对象的引用或指针超出作用域时,不会运行析构函数,只会删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数。
撤销一个容器(标准库或内置数组)时,也会运行容器中的类类型元素的析构函数
Sale_item *p=new Sale_item[10];//动态分配内存空间,定义一个类类型数组vector<Sale_item> vec(p,p+10);//定义一个容器vec,里面放的Sale_item类类型的对象,9.1节顺序容器的初始化//默认初始化为指针p和p+10之间的元素//。。。。。。。。delete [] p;//容器中的每个类类型元素都会运行析构函数
- 容器中的元素总是按逆序撤销:首先撤销下标为size()-1的元素。。直至最后撤销下标为0的元素
二、何时编写显示析构函数
有些类不需要显示析构函数,尤其是具有构造函数的类不一定需要定义自己的析构函数。
仅在有些工作需要析构函数完成时,才需要析构函数。析构函数通常用于释放在构造函数或在对象生命期内获取的资源。
如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这是一个有用的经验法则——–三法则,指的是如果需要析构函数,则需要所有这三个复制控制成员。
析构函数并不仅限于用来释放资源。一般而言,析构函数可以执行任意操作,该操作是类设计者希望在该类对象的使用完毕之后执行的。
三、合成析构函数
与复制构造函数和赋值操作符不同,编译器会为我们合成一个析构函数(哪里不同了?????)。
合 成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员。
对于类类型的每个成员,合成析构函数调用该成员的析构函数来撤销对象。
撤销内置类型成员或复合类型的成员没有什么影响。尤其是,合成析构函数并不删除指针成员所指的对象。
四、编写析构函数
Sale_item类是类,没有分配资源因此不需要自己的析构函数。
分配了资源的类一般需要定义析构函数以释放那些资源。
析构函数是个成员函数,它的名字是在来名字之前加上一个代字号 “~”。它么有返回值,没有形参,但只能提供一个析构函数,应用与类的所有对象。
析构函数与复制构造函数和赋值操作符之间一个重要区别,即使我们编写了自己的析构函数,合成析构函数仍然运行。
class Sale_item{public: ~Sale_item(){}};//撤销Sale_item类型的对象时,将运行这个什么也不做的析构函数,它执行完毕后,将运行合成析构函数以撤销类成员。//合成析构函数调用string析构函数来撤销string成员。string析构函数释放了保存isbn的内存。units_sold和revenue成员是内置类型,所以,合成析构函数撤销他们不需要做什么。
- C++/copy/Destructor(析构函数)
- destructor(析构函数)
- 析构函数DESTRUCTOR
- 析构函数(destructor)
- C++13.3 析构函数destructor
- 析构函数(destructor)
- 北大 C++ 3.3 析构函数(Destructor)
- C++析构函数(Destructor)
- C++析构函数(Destructor)
- 构造函数 与 析构函数 constructor and destructor
- c++:构造函数(constructor)和析构函数(destructor)中编译器的隐式行为(implicit behavior)
- C#析构函数(destructor)和终结器(Finalizer)
- C# 析构函数(destructor)和终结器(Finalizer)
- C#析构函数(destructor)和终结器(Finalizer)
- C++面向对象析构函数用法,destructor
- C#基础之构造函数(Constructor)与析构函数(Destructor)
- C++ 构造函数constructor 与 析构函数destructor 的区别
- 构造函数(Constructor)析构函数(Destructor)怎么用?
- 使用AsyncTask实现网络数据的异步访问
- 需求调研报告(用户需求说明书)编写规范
- 多路归并使用败者树的性能分析
- leetcode 33 Search in Rotated Sorted Array
- iOS开发——CoreBluetooth蓝牙开发(二)
- C++13.3 析构函数destructor
- eclipse中hibernate配置文件自动提示
- 自动登录界面
- leetcode--CourseScheduleII
- 关于编译报错“dereferencing pointer to incomplete type...
- HDU ACM 5273 Dylans loves sequence->DP
- 深入浅出AOP(一)
- Eclipse常用快捷键
- “概要设计说明书”编写规范