PHP虚析构函数怎么用-创新互联

这篇文章主要讲解了“PHP虚析构函数怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP虚析构函数怎么用”吧!

目前成都创新互联公司已为数千家的企业提供了网站建设、域名、网站空间网站托管运营、企业网站设计、遂川网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
预备知识

用一个例子来说明虚析函数的必要性.在程序清单1中,基类A的构造函数动态分配5个字节,其析构函数负责释放这块内存.派生类Z的构造函数动态分配5000个字节,其析构函数负责释放这块内存.

程序清单1
#include 
using namespace std;

class A{ // base class
	public:
		A(){
			 cout<<"A() firing"<

在main中三次调用f函数:

void f(){
	A *ptr; //pointer to base class
	ptr = new Z(); // pointer to derived class object
	delete ptr; //~A() fires but not ~z()
}//***** Caution:50000 bytes of inaccessible storage

由于类A和Z的构造函数与析构函数输出了跟踪信息,程序运行的结果如图所示:

将析构函数声明为虚成员函数可以解决程序清单1中的问题:

class A{ // base class
	public:
		A(){
			 cout<<"A() firing"<

通过定义基类的析构函数~A()为虚成员函数,可以确保其派生类的析构函数也为虚成员函数.为了使代码更清晰,我们可以明确地使用关键字virtual来声明~Z(),不过即使我们不这样做,~Z()仍然为虚成员函数,修改后的程序输出如下图所示:

现在,由于析构函数已经声明为虚成员函数,当通过ptr来删除其所指针的对象时,编译器进行的是运行期绑定.在这里,因为ptr指向一个Z类型的对象,所以~Z()被调用.我们看到随后~A()也被调用了,这是通过将析构函数定义为虚成员函数,我们就保证了在调用f时不会产生内存遗漏.

感谢各位的阅读,以上就是“PHP虚析构函数怎么用”的内容了,经过本文的学习后,相信大家对PHP虚析构函数怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!


网页题目:PHP虚析构函数怎么用-创新互联
本文路径:http://myzitong.com/article/ddcodc.html