从其成员函数中删除对象
Deleting object from its member function
有一个container
对象和一个item
对象。Item
是container
的一部分。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
为假,checkFailed
从Container
被调用(targetItem
是从Check()
函数被调用的item
)会发生什么。
行为定义良好(或未定义)。
更具体地说,如果对象是用操作符new
创建的,并且在delete
d之后不使用,则行为是定义良好的(例如,指向它的[现在悬空]指针被解引用,访问非静态成员,调用非静态成员函数等)。
如果对象在被删除后被使用,那么行为是未定义的。
是的,这是一个更复杂的delete this的例子,一旦Container::checkFailed()
返回到Item::check()
, this*(以及Item实例的任何/所有成员)就消失了,并且不能在没有未定义行为的情况下使用。
相关文章:
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象