从其成员函数

时间:2016-09-22 13:49:01

标签: c++ delete-operator

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

当删除container对象的item函数返回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为假且来自checkFailed的{​​{1}}被调用会发生什么(Container是来自{targetItem的{​​{1}} 1}}函数被调用)。

2 个答案:

答案 0 :(得分:1)

是的,这是一个更详细的删除此案例,一旦Container::checkFailed()返回Item::check(),此*(以及Item实例的任何/所有成员)都消失了,如果没有未定义则无法使用行为。

答案 1 :(得分:1)

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

更具体地说,如果对象是使用运算符new创建的,并且在delete d之后未使用(例如,[now dangling]指针被取消引用,则行为是明确定义的,访问非静态成员,调用非静态成员函数等。

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