今天,我看到了一些旧代码。在析构函数中有一个类似“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]是的,我知道这不是线程安全的。