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

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

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/113858260