C 析构函数

C 析构函数概述

C 析构函数是一个特殊的成员函数,作用与构造函数相反,它的名字是类名的前面加一个~符号,析构函数是与构造函数作用相反的函数,当对象的生命期结束时,会自动执行析构函数。

C 执行析构函数的情况

如果在一个函数中定义了一个对象,当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束调用exitt函数结束程序时,才调用static局部对象的析构函数。如果定义了一个全局对象,则在程序的流程离开其作用域时,调用该全局对象的析构函数。

如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。 

C 析构函数详解

析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。

析构函数不返回任何值,没有函数类型,也没有函数参数,因此不能重载,一个类可以有多个构造函数,但只能有一个析构函数。 

析构函数的作用并不仅限于释放资源方面,它还可以被用来执行程序员希望在最后一次使用对象之后所执行的任何操作。

如果没有定义析构函数,C 编译系统会自动生成一个析构函数,但它只是徒有析构函数的名称和形式,实际上什么都不执行,要想让析构函数执行,必须在定义的析构函数中指定。

案例:C 析构函数案例

#include 
using namespace std;
class Number
{
   public:
      void setNumber( double num );
      double getNumber( void );
      Number(); // 这是构造函数声明
      ~Number(); // 这是析构函数声明
   private:
      float number;
};
// 成员函数定义,包括构造函数
Number::Number(void)
{
    cout << "我是构造函数" << endl;
}
Number::~Number(void)
{
    cout << "我是析构函数" << endl;
}
 
void Number::setNumber( double num )
{
    number = num;
}
 
double Number::getNumber( void )
{
    return number;
}
// 程序的主函数
int main( )
{
   Number num;
   num.setNumber(6.0); // 设置长度
   cout << "学号是:" << num.getNumber() <<endl;
   return 0;
}

编译运行结果:

我是构造函数
学号是:6
我是析构函数

--------------------------------
Process exited after 2.047 seconds with return value 0
请按任意键继续. . .

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面对析构函数的正确描述是 B. 析构函数没有参数。析构函数是一种特殊的成员函数,用于在对象销毁时进行清理工作。与构造函数不同的是,析构函数的名称是在类名前面加上波浪号 `~`,例如 `~MyClass()`。析构函数没有参数,并且没有返回值,因为在对象销毁时,系统不需要得到任何返回值。 对于析构函数的其他描述是: A. 析构函数必须由用户定义。在 C++ 中,如果一个类没有定义析构函数,系统会自动生成一个默认的析构函数,用于释放对象占用的内存。但是,如果类中定义了指针、文件句柄等资源,或者使用了 new 运算符动态分配内存,那么就需要定义自己的析构函数,以确保这些资源能够被正确地释放。 C. 系统可以提供默认的析构函数。在 C++ 中,如果一个类没有定义析构函数,系统会自动生成一个默认的析构函数,用于释放对象占用的内存。但是,如果类中定义了指针、文件句柄等资源,或者使用了 new 运算符动态分配内存,那么就需要定义自己的析构函数,以确保这些资源能够被正确地释放。 D. 析构函数不可以设置默认参数。析构函数没有参数,因此也不需要设置默认参数。如果在析构函数中使用了参数,则会导致编译错误。例如: ```c++ class MyClass { public: ~MyClass(int x = 0) { // 错误:析构函数不能有参数 // ... } }; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值