Самоудаляющиеся объекты
От: Nikopol  
Дата: 12.01.05 10:43
Оценка:
Здравствуйте.

Сразу оговорюсь, использование стороннего кода, даже свободно распространяемого,
невозможно.
Это ограничение написано в техзадании на проект.

Для уменьшения количества проблем, связаных с неудалёнными объектами,
написал простенький базовый класс, подсчитывающий количество ссылок на объекты.

class CSelfDeleting
{
public:
    CSelfDeleting() : m_RefCounter(1) {}
    virtual ~CSelfDeleting() {}
    virtual unsigned long AddRef() const
    {
        ++m_RefCounter;
        return m_RefCounter;
    }
    virtual unsigned long Release() const
    {
        --m_RefCounter;
        if( m_RefCounter == 0 )
            delete this;
        return m_RefCounter;
    }
protected:
    unsigned long GetRefCount()
    {
        return m_RefCounter;
    }
private:
    mutable unsigned long m_RefCounter;
};

template<class T>
class CObjectHolderCounting // T - должен быть наследником CSelfDeleting
{
public:
    // конструкторы, деструктор, операторы присваивания
private:
    T* m_pObject;
};


Повсюду в коде обычные указатели заменяются на эти, хммм.., "умные"

Основная идея — запретить удаление объектов посредством delete.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.