相关疑难解决方法(0)

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

我在C#度过了最近4年,所以我对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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们有一个负责管理一组对象并定期更新它们的世界.火是一种可能在许多不同情况下被添加到世界中的物体,但通常是世界上已有的另一物体.Fire是唯一知道什么时候它已经烧毁的对象,所以目前我已将它自行删除.造成火灾的对象可能不再存在或相关.

这是一件明智的事情还是有更好的设计来帮助清理这些物体?

c++ oop memory-management self-destruction resource-cleanup

24
推荐指数
6
解决办法
2万
查看次数

是否可以使用"删除此项"删除当前对象?

我正在编写一个链表,我想要一个struct的析构函数(一个Node结构)来简单地删除它自己,并且没有任何副作用.我希望我的列表的析构函数迭代地自己调用Node析构函数(临时存储下一个节点),如下所示:

//my list class has first and last pointers
//and my nodes each have a pointer to the previous and next
//node
DoublyLinkedList::~DoublyLinkedList
{
    Node *temp = first();

    while (temp->next() != NULL)
    {
        delete temp;
        temp = temp->next();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以这将是我的Node析构函数:

Node::~Node
{
   delete this;
}
Run Code Online (Sandbox Code Playgroud)

这是否可以接受,特别是在这种情况下?

c++ destructor linked-list this self-destruction

7
推荐指数
1
解决办法
2237
查看次数