PHP虚析构函数怎么用

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

创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为江油企业提供专业的成都网站设计、做网站,江油网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

预备知识

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

程序清单1
#include <iostream>
using namespace std;

class A{ // base class
	public:
		A(){
			 cout<<"A() firing"<<endl;
			 p = new char[5]; // allocate 5 bytes
			
		}
		~A(){
			cout<<"~A() firing"<<endl;
			delete[] p;// free 5 bytes
		}
	
	private:
		char *p;
};

class Z: public A {//derived class
	public:
		Z(){
			cout<<"Z() firing"<<endl;
			q = new char[5000];//allocate 5000 bytes
		}			
		~Z(){
			cout<<"~Z() firing"<<endl;
			delete[] q; //free 50000 bytes
		}
	
	 private:
			char *q;
};

void f();


int main(){
	for(unsigned i =0; i<3; i++)
		f();
	return 0;
}

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

在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的构造函数与析构函数输出了跟踪信息,程序运行的结果如图所示:

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

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

本文名称:PHP虚析构函数怎么用
URL地址:https://www.cdcxhl.com/article32/pdcjsc.html

成都网站建设公司_创新互联,为您提供小程序开发网站设计全网营销推广品牌网站设计面包屑导航网站导航

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司