Os objetos devem se excluir em C ++?

Eu passei os últimos 4 anos em C #, por isso estou interessado nas melhores práticas atuais e nos padrões de design comuns em C ++. Considere o seguinte exemplo parcial:

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

Aqui temos um mundo responsável por gerenciar um conjunto de objetos e atualizá-los regularmente. O fogo é um objeto que pode ser adicionado ao mundo sob muitas circunstâncias diferentes, mas normalmente por outro objeto já existente no mundo. O fogo é o único objeto que sabe quando está queimado, então atualmente eu o excluo. O objeto que criou o incêndio provavelmente não existe mais ou é relevante.

Isso é algo sensato ou existe um design melhor que ajude a limpar esses objetos?

questionAnswers(11)

yourAnswerToTheQuestion