cpp 析构函数的两个执行时机

/*
 * test.cpp
 *
 *  Created on: 2013-5-13
 *      Author: Administrator
 */

#include 

/*
 * 子类的析构函数执行结束会自动调用父类的析构函数(并且子类的析构函数先执行)
 * 析构函数destructor的执行时机:
 * 1.对于类类型的变量,作为函数的局部变量,在函数执行结束之前,会调用类的析构函数
 * 2.对于类的指针类型的变量,在作为函数的局部变量,在函数执行结束之前,不会调用其析构函数,
 * 而是在对该类的指针调用delete时,才会调用该类的析构函数
 *
 */
using namespace std;

class F {
public:
	void say();
	virtual void say2();
	virtual ~F(); //析构函数最好声明为虚函数,为了能够使用多态特性
private:
	int a;
};

class C: public F {
public:
	void say();
	virtual void say2();
	virtual ~C();
private:
	int b;
};

void F::say() {
	cout << "F say" << endl;
}

void C::say() {
	cout << "C say" << endl;
}

void F::say2() {

	cout << "F say2" << endl;
}

void C::say2() {

	cout << "C say2" << endl;
}

F::~F() {
	cout << "F destructor" << endl;
}

C::~C() {
	cout << "C destructor" << endl;

}

int main(int argc, char **argv) {

	//1.析构函数没有被调用
	/*
	 F * pf = new F;
	 C * pc = new C;

	 pf->say();
	 pc->say();
	 */

	//2.析构函数被调用
	/*
	F * pf = new F;
	C * pc = new C;

	pf->say();
	pc->say();

	delete pf;
	delete pc;
	*/

	//3。析构函数被调用
	F f;
	C c;
	f.say();
	c.say();

	return 0;
}

你可能感兴趣的:(语言-CPP)