从其成员函数中删除对象

Deleting object from its member function

本文关键字:删除 对象 函数 成员      更新时间:2023-10-16

有一个container对象和一个item对象。Itemcontainer的一部分。item成员函数调用container函数,删除item

当删除item对象的container函数返回到item成员函数时会发生什么?听起来它会导致未定义行为。这是一个更复杂的delete this;案例吗?

编辑:

class Item
{
   Container* itemContainer;
   std::string itemName;
   void check(void)
   {
       bool condition = false;
       // check some condition (not relevant to the question)
       if (!condition)
       {
           itemContainer->CheckFailed(itemName);
       } 
   }
}
class Container
{
    std::vector<Item*> itemList;
    void checkFailed(std::string)
    {
        Item* targetItem;
        //find item by name
        delete targetItem;
    }
}

所以我的问题是:如果condition为假,checkFailedContainer被调用(targetItem是从Check()函数被调用的item)会发生什么。

行为定义良好(或未定义)。

更具体地说,如果对象是用操作符new创建的,并且在delete d之后不使用,则行为是定义良好的(例如,指向它的[现在悬空]指针被解引用,访问非静态成员,调用非静态成员函数等)。

如果对象在被删除后被使用,那么行为是未定义的。

是的,这是一个更复杂的delete this的例子,一旦Container::checkFailed()返回到Item::check(), this*(以及Item实例的任何/所有成员)就消失了,并且不能在没有未定义行为的情况下使用。