欢迎来到 跌倒的小黄瓜 的博客

♪(^∇^*)我要当大佬,(#^.^#)哈哈哈哈,(。-ω-)zzz我要成为优秀的人,(*^▽^*)٩(๑>◡<๑)۶O(∩_∩)O哈哈~~~~~~~~欢迎━(*`∀´*)ノ亻!

c++-虚析构函数

虚析构函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>


using namespace std;

class A
{
public:
	A() {
		cout << "A()..." << endl;
		this->p = new char[64];
		memset(this->p, 0, 64);
		strcpy(this->p, "A String..");
	}

	virtual void print()
	{
		cout << "A: " << this->p << endl;
	}

	virtual ~A() {
		cout << "~A()..." << endl;
		if (this->p != NULL) {
			delete[]this->p;
			this->p = NULL;
		}
	}
private:
	char *p;
};

class B :public A
{
public:
	B() //此刻会触发A()
	{
		cout << "B()..." << endl;
		this->p = new char[64];
		memset(this->p, 0, 64);
		strcpy(this->p, "B String..");
	}

	virtual void print()
	{
		cout << "B: " << this->p << endl;
	}

	virtual ~B() {
		cout << "~B()..." << endl;
		if (this->p != NULL) {
			delete[] this->p;
			this->p = NULL;
		}
	}
private:
	char *p;
};


void func(A *ap)
{
	ap->print();//在此发生多态

}

void deleteFunc(A *ap)
{
	delete ap; //此刻ap->~B() //~B() ---> ~A()
}

void test()
{
	//A *ap = new A;
	//func(ap);
	B *bp = new B;
	func(bp);

	deleteFunc(bp);
}

int main(void)
{
	test();
	

	B bObj;

	//bObj.~B();
	return 0;
}
posted @ 2019-12-22 08:48  跌倒的小黄瓜  阅读(264)  评论(4编辑  收藏  举报