创建对象数组的时候,不要使用继承,因为如果一个数据声明为父类型,但是实际使用子类型创建,那么在删除对象数据的时候,则只会调用父类型的析构函数,而不会调用子类型的析构函数,造成内存泄漏,例如:
class Base
{
public:
Base(){cout << "Base()" <<endl;}
~Base(){cout <<"~base()" <<endl;}
};
class Son:public Base
{
public:
Son(){cout << "Son()"<<endl;}
~Son(){cout << "~Son()" << endl;}
};
void printClass()
{
//Son s[10];
Base *b = new Son[10];
delete[] b;//只会打印出10个~base(),而不会调用~Son()
}
class Base
{
public:
Base(){cout << "Base()" <<endl;}
~Base(){cout <<"~base()" <<endl;}
};
class Son:public Base
{
public:
Son(){cout << "Son()"<<endl;}
~Son(){cout << "~Son()" << endl;}
};
void printClass()
{
//Son s[10];
Base *b = new Son[10];
delete[] b;//只会打印出10个~base(),而不会调用~Son()
}