今天,我看到了一些旧代码。在析构函数中有一个类似“delete this”的语句。我认为,此调用将是递归的。它为什么起作用?

我对Y!进行了一些快速搜索,发现如果需要限制用户创建堆栈对象,我们可以将析构函数设为私有(private),并提供删除实例的接口(interface)。在提供的接口(interface)中,我们必须在此指针上调用delete。

使用这种语句还有其他情况吗?

最佳答案

“删除此”通常用于引用计数的对象。对于引用计数的对象,何时删除的决定通常由对象本身决定。这是一个Release方法看起来像[1]的示例。

int MyRefCountedObject::Release() {
  _refCount--;
  if ( 0 == _refCount ) {
    delete this;
    return 0;
  }
  return _refCount;
}

ATL COM对象是此模式的主要示例。

[1]是的,我知道这不是线程安全的。

10-06 05:14
查看更多