--------------------------------------------------------------------------
*整理:Zsm。
*时间:2011-4-15。
*出处:http://blog.csdn.net/Zsm0107。
-----------------------------------------------------------------------------------
没有正确的清除嵌套的对象指针
详细:
一个对象以引用的方式包含了另一个对象,而不是用值的方式。只有一个对象以值方式包含另一个对象的时候才会自动的调用另一个对象的析构函数。
例子:
#include<iostream>
#include<string>
using namespace std;
class Melon
{
private:
char *variety;
public:
Melon(char *var);
~Melon();
void print();
};
Melon::Melon(char *var)
{
variety=new char[strlen(var)+1];
strcpy(variety,var);
}
Melon::~Melon()
{
delete variety;
}
void Melon::print()
{
cout<<"I'm a "<<variety<<"Melon"<<endl;
}
class Meal
{
private:
char *restaurant;
Melon *m;
public:
Meal(char *var , char *res);
~Meal();
void print();
};
Meal::Meal(char *var , char *res)
{
m=new Melon(var);
restaurant=new char[strlen(res)+1];
strcpy(restaurant , res);
}
//哎呀,没有释放甜瓜。如果甜瓜是作为一个被包含的对象的话,就不会是这样子了。
Meal::~Meal()
{
delete restaurant;
}
//正确的析构函数如下:
/*
Meal ::~Meal()
{
delete restaurant;
delete m;
}
*/
void Meal::print()
{
cout<<"I'm a Meal owed by";
m->print();
}
int main()
{
Meal m1("Honeydew" ,"Four Seasons ");
Meal m2("Cantaloup" ,"Brook Manor Pub");
m1.print();
m2.print();
return 0;
}