首页 / 更多教程 / 虚析构函数与纯虚函数
虚析构函数与纯虚函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了虚析构函数与纯虚函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含834字,纯文字阅读大概需要2分钟。
内容图文
![虚析构函数与纯虚函数](/upload/InfoBanner/zyjiaocheng/1045/21c901dadf08434d86c20b978fec83ce.jpg)
虚析构函数
通过基类的指针删除派生类对象时,通常情况只调用基类的析构函数
但是,删除一个派生类对象时,应该先调用派生类的析构函数,然后调用基类的析构函数(构造时自顶向下,析构时自底向上)
这种情况会产生内存泄漏,最终导致系统应可用内存不足而崩溃
解决办法
把基类的析构函数声明为virtual,此时派生类的析构函数即使不声明为virtual也为virtual函数
在调用基类的指针删除派生类对象时,会先调用派生类的析构函数,最后调用基类的析构函数
一般方法
如果一个类定义了虚函数,那么析构函数也应该定义为虚函数
或者一个类打算作为基类使用,也应该讲析构函数定义为虚函数
纯虚函数与抽象类
包含纯虚函数的类叫抽象类,抽象类只能作为基类来派生新类使用,不能创建抽象类的对象
抽象类的指针和引用可以指向由抽象类派生出来的类的对象
class A; //抽象类 A a; //错误 A *pa; //正确 pa = new A; //错误
在抽象类的成员函数内可以调用虚函数,但是在构造函数或析构函数内部不能调用纯虚函数。(在成员函数内调用虚函数是多态,在构造函数和析构函数中调用虚函数不是多态)
如果一个类从抽象类派生而来,当且仅当它实现了基类中所有的纯虚函数,它才能成为非抽象类。
class A { public : virtual void f() = 0; void g() { this->f(); //正确,this指针一定指向一个派生类 } A() { //此处不能用f() } }; class B : public A { public: void f() { cout << "B:f()" << endl; } }; int main() { B b; b.g(); return0; }
原文:https://www.cnblogs.com/zhp-purelove/p/9949595.html
内容总结
以上是互联网集市为您收集整理的虚析构函数与纯虚函数全部内容,希望文章能够帮你解决虚析构函数与纯虚函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。