C++ 函数中“delete this”的行为
假设我有一个类C++ 函数中“delete this”的行为,c++,C++,假设我有一个类foo,它有一个函数release,调用delete this: struct foo { std::int32_t release() const { delete this; return 0; } }; 既然函数是const,为什么我甚至可以调用删除此 是否定义了返回0时的行为?删除后的函数“sort of die”不是吗 如果您能给出一个参考标准的答案(这样我就可以在代码中添加一条奇特的注释),我们将不胜感激 既然函
foo
,它有一个函数release
,调用delete this
:
struct foo
{
std::int32_t release() const
{
delete this;
return 0;
}
};
const
,为什么我甚至可以调用删除此
删除后的函数“sort of die”不是吗
delete
不一定会修改已删除的指针
是否定义了返回0时的行为?删除后的函数“sort of die”不是吗
为什么会这样?该逻辑不会从程序中删除。该功能保留在内存中,供下一个对象使用。只有这个
指针无效
这里有一个点,它有一个条目,摘录如下:
我认为它是安全的<代码>删除此项将调用析构函数并释放对象(包括成员变量和基类子对象)持有的内存。在那之后,如果你不解除这个,或者访问任何成员变量,它就安全了。早上的斯洛奇:这一次我不能回答你的问题。我认为这是安全的,因为我很久以前写的代码,我仍然享受全职工作!1.删除并不是真的修改一个对象,而是将一个对象炸得不存在。将成员函数视为只包含一个额外(尽管是隐藏的)
此
参数的静态函数。只要删除对象后不引用此
,就可以了。PS这是我们的代码。这是中的一个条目。它用于COM样式的引用计数。请参阅将函数限定为常量是一个错误。您可以通过const引用传递对象,任何人都可以释放。我不想调试这段代码。“它按值获取指针(void*),任何T*都可以转换为它。”--这不是真的,delete
操作符对键入的指针起作用,否则它无法调用析构函数。您指的是功能操作员删除
。