从其成员函数中删除对象

Deleting object from its member function

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

container 函数删除 item 对象 returns 到 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 为假并且调用 Container 中的 checkFailed 会发生什么(targetItemitem 从哪里Check() 函数被调用)。

是的,这是 delete this 的一个更复杂的案例,一旦 Container::checkFailed() returns 到 Item::check() this*(和 Item 实例的 any/all 成员)已经消失,没有未定义的行为就不能使用。

行为定义明确(或未定义)。

更具体地说,如果对象是使用运算符 new 创建的,并且在 deleted 之后不再使用(例如,指向它的 [现在悬挂] 指针是取消引用,访问非静态成员,调用非静态成员函数等)。

如果对象在删除后被使用,则行为未定义。