Должны ли объекты удалять себя в C ++? - PullRequest
24 голосов
/ 07 февраля 2009

Последние 4 года я провел в C #, поэтому меня интересуют текущие передовые практики и общие шаблоны проектирования в C ++. Рассмотрим следующий частичный пример:

class World
{
public:
    void Add(Object *object);
    void Remove(Object *object);
    void Update();
}

class Fire : Object
{
public:
    virtual void Update()
    {
        if(age > burnTime)
        {
            world.Remove(this);
            delete this;
        }
    }
}

Здесь у нас есть мир, ответственный за управление набором объектов и их регулярное обновление. Огонь - это объект, который может быть добавлен в мир при многих других обстоятельствах, но обычно другим объектом, уже существующим в мире. Огонь - единственный объект, который знает, когда он сгорел, поэтому в настоящее время я удаляю его сам. Объект, который создал огонь, вероятно, больше не существует или не имеет отношения к делу.

Разумно ли это делать или есть лучший дизайн, который поможет очистить эти объекты?

Ответы [ 11 ]

0 голосов
/ 07 февраля 2009

Мне не кажется, что в удалении самого объекта что-то не так, но другой возможный метод - заставить мир отвечать за удаление объектов как часть :: Remove (при условии, что все Удаленные объекты также были удалены).

...