Как заставить их вызываться диструкторы потомков?
От: Seregik  
Дата: 28.10.02 23:38
Оценка:
Есть вот такая програмка.

И ведь транслируется и наверно даже работает.
Но точно неправильно. При удалении списка "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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.