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

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

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

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;
};


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

Проблема в том, что всё равно можно удалить класс-наследник CSelfDeleting с помощью тривиального delete.
class CMyClass : public CSelfDeleting
{
// blah-blah
};
CMyClass* pObject = new CMyClass;
delete pObject;


Основная идея — запретить удаление объектов посредством delete.

Как бы так сделать, чтобы можно было манипулировать объектами только с помощью "умных" указателей,
но не удалять их с помощью delete.
Желательно, чтобы такие попытки отсекались самим компилятором.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.