
当用户没有显式定义析构函数时, 编译器同样会为对象生成一个默认的析构函数, 但默认生成的析构函数只能释放类的普通数据成员所占用的空间, 无法释放通过 new 或 malloc 进行申请的空间, 因此有时我们需要自己显式的定义析构函数对这些申请的空间进行释放, 避免造成内存泄露。
如果函数的形参是类的对象,则在进行函数调用时,将自动调用复制构造函数,这也是复制构造函数中的形参如果不是对象引用会造成无限循环调用的原因。
析构函数是类结束时候调用的函数,由系统自动调用,一般是用来做释放内存和做类结束时的收尾工作。你可以不用析构函数,但是类结束时你自己要做好释放内存和收尾工作。
成员函数和析构函数都属于类的函数,每个类都要一个析构函数,成员函数与析构函数无关,只有类才有对应的析构函数,且只一个,并不是每个成员函数就有一个对应的析构函数,它们没有任何关系。
析构函数代表的意思是程序自动分配的内存会自动释放,但是如果你new malloc 分配的内存需要在程序结束后释放,需要一个执行步奏,一般析构函数是在程序执行完后才会调用析构函数!至于你说的析构函数需要手动输入,我理解的意思要不要在类中声明,答案不是必须的!即使你不写程序最后也会调用默认的!但是,一般都会手动加一个!
你好!
无参构造函数,写不写都可以,即使不写,编译器也会给你加一个默认构造函数的
析构函数写成虚函数,在这个例子当中没有发现这么写的必要,但是这样写有一个好处
就是当派生类中析构函数有 *** 作时,调用基类函数指针进行delete *** 作,同样可以执行派生类析构函数
所以在基类析构函数没有任何 *** 作情况下,把它定义成虚函数
如果对你有帮助,望采纳。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)