在C++中,对象是否应该自行删除?

24

我过去四年一直在使用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

删除操作非常危险。它本身没有任何“错误”。它是合法的。但是当你使用它时,有很多事情可能会出错,因此应该谨慎使用。

考虑这样一种情况:某人打开了指向该对象的指针或引用,然后它自己被删除了。

在大多数情况下,我认为对象的生命周期应该由创建它的同一个对象来管理。这只是使得知道销毁发生的位置更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接