析构函数

          

类的析构函数是用于取消对象的成员函数 , 当一个对象作用域结束时,系统自动调用析构函数。

析构函数的作用:进行清除对象,释放内存等

析构函数的特点:

析构函数的名称与类的名称相同,前面多一个~,并且没有返回值。

没有用户定义的析构函数时,系统提供缺省版本的析构函数。

析构函数没有参数,也没有返回类型,不可以重载。

我们在C++中主动调用析构函数时,析构函数只是一个普通的函数,如果不在析构函数内部主动释放成员变量的内存,那么我们主动调用它,就只是调用它了,它除了将内部的代码运行一遍就什么也不会做。尽管,在它的作用中有清除对象释放内存的功能,事实上它说的是每当自定义类型的对象所在的函数运行完后,C程序会主动将该对象所占用的内存进行释放,并在释放过程调用该对象的析构函数。当然如果你在析构函数中写了释放内存的代码,你最好还是不要去主动调用,虽然此时的析构函数能够去释放成员变量的内存,但是自定义类型的对象的内存还在,你不去想方设法的将对象的内存释放的话,你就等着程序主动释放内存然后报错吧,因为,程序不会在乎析构函数里要释放的成员变量的内存是否被释放,当然这时候用if判断成员变量的内存是否为空,然后在释放这样就可以避免报错了。

析构函数可以不用在类中声明,因为程序会自动生成析构函数。

#pragma once

class Men

{

public:

Men();

~Men();//析构函数

private:

int* a;

};

类定义:

#include "Men.h"

#include <iostream>

Men::Men() {

this->a = new int;

}

Men::~Men() {

std::cout << "调用析构函数" << std::endl;

}

上面的类定义中,我主动的定义了析构函数,因为我想要知道程序在什么时候调用析构函数。其中还有一个细节,我在类中声明一个指针,并在构造函数的定义中为这个成员变量申请了堆区的内存。但是在析构函数的定义中我没有去主动释放它,然后问题就来了,这块在堆区的内存会像普通成员变量一样被释放吗,要知到普通成员变量的内存地址在栈区,所以不会。既然没有被释放那么这块地址就泄露了,当然C程序会在主函数调用完了后,主动去回收这些泄露的内存,所以只要你的内存足够大那么就不用太多担心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值