Есть вот такая програмка.
И ведь транслируется и наверно даже работает.
Но точно неправильно. При удалении списка "some_list" не вызываются
диструкторы классов "some_A" и "some_B".
Вопрос: А как заставить их вызываться?
typedef char type1;
typedef double type2;
class base_class
{
public:
base_class(){};
~base_class(){};
};
class some_A:public base_class
{
type1* pY;
public:
some_A(type1* ptr){pY=ptr;};
~some_A(){delete pY;};
};
class some_B:public base_class
{
type2* pZ;
public:
some_B(type2 *ptr){pZ=ptr;};
~some_B(){delete pZ;};
};
template <class T>
class some_list
{
T* pItem;
some_list<T>* pn;
public:
some_list(){ pItem=0; pn=0; };
~some_list(){
if (pn)
delete pn;
delete pItem;
}
void Add(T* ptr){
// ....
some_list<T>* pt=new some_list<T>;
pt->pItem=ptr;
pt->pn=pn;
pn=pt;
// ....
}
};
int main(int argc, char* argv[])
{
some_list<base_class>* pL=new some_list<base_class>;
pL->Add(new some_A(new type1(1)));
pL->Add(new some_B(new type2(2.0)));
delete pL;
return 0;
}