《Effective C++》Rule 7: 为多态基类声明virtual析构函数

/*
*
* Rule 7: 为多态基类声明virtual析构函数
*
*/

#include <iostream>
#include <string>

using namespace std;

class object
{
public:
	object()
	{
	}

	virtual ~object() = 0;

private:

};

//没错,你会发现纯虚函数也可以定义的,然而,值得注意的是:
//只有纯虚的析构函数才有意义
object::~object()
{
	cout << "I'm object destructor" << endl;
}

class pen 
	: public object
{
public:
	pen()
	{
	}

	~pen()
	{
		cout << "I'm pen destructor." << endl;
	}

private:

};

class non_virtual_object
{
public:
	non_virtual_object(){}
	~non_virtual_object()
	{
		cout << "I'm non_virtual_object destructor." << endl;
	}
};


class computer : public  non_virtual_object
{
public:
	computer() {}
	~computer()
	{
		cout << "I'm computer's destructor which derived from non_virtual_object class." << endl;
	}
};

int main()
{

	//这样就只调用父类的析构函数,而不调用子类的。
	//这样就难以实现对子类的析构,因此,我们需要将基类的析构函数设为虚函数
	non_virtual_object* myComputer = new computer;
	delete myComputer;

	pen x;

	return 0;
}

/*
*总结:
*
* 1、如果class带有任何virtual函数,它就应该拥有一个virtual析构函数
* 2、基类的设计目的如果不是作为基类使用,或不是为了具备多态性,
*    就不该声明virtual析构函数(析构函数在编译的时候会占用内存)
*
*/


实现效果:

《Effective C++》Rule 7: 为多态基类声明virtual析构函数_第1张图片

你可能感兴趣的:(C++)