c++ - 使用 "delete this"在多大程度上符合 C++ 标准?

标签 c++

在对象中实现引用计数时,“释放并可能删除对象”原语通常是这样实现的:

void CObject::Release()
{
    --referenceCount;
    if( referenceCount == 0 ) {
       delete this;
    }
}

首先,delete this 看起来很吓人。但是由于成员函数立即返回并且不尝试访问任何成员变量,所以这些东西仍然可以正常工作。至少通常是这样解释的。成员函数甚至可能调用一些全局函数来写入它删除对象的日志。

C++ 标准是否保证成员函数可以调用 delete this 然后执行任何不需要访问成员变量和调用成员函数的操作,这将被定义为正常行为?

最佳答案

参见 C++ FAQ .

我没有标准的拷贝,但我可以通过谷歌搜索找到最好的“引用”是 this .

引用上面的内容:

So now I'm wondering if there is anything in the C++ standard that guarantees that a "delete this;" won't crash the program when the function returns.

没有人可以给你这样的保证,因为它可能会崩溃。

不符合标准。标准很明确 唯一的问题是对象是否在删除后被使用。和 标准也非常清楚地说明(在§3.2/2)当一个对象 是“使用”,什么时候不是。

关于c++ - 使用 "delete this"在多大程度上符合 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866193/

相关文章:

c++ - 从用户模式 ​​win32 应用程序可靠地找到当前进程的 _write() 函数的地址

c++ - if else 程序切换程序

c++ - 有没有办法创建具有通用属性的 namespace ?

c++ - 从C++中动态分配的数组中删除对象

c++ - 从 'BYTE *' 到 'ULONG' 的指针截断

c++ - 将参数传递给在 C++ 中不起作用的可执行文件

c++ - 在绘图区绘制一个临时的 'select' 矩形

c++ - 即使调用 get() , future 也不会运行

c++ - 在 MFC 应用程序中创建和使用 Dll

c++ - C++ 中奇怪的自动引用