我有一个使用了引用计数机制的类。当参考计数下降到零时,通过调用delete this
最终销毁此类的对象。我的问题是:我可以在delete this
之后使用本地堆栈变量吗?这里的一个更具体的例子:后访问本地变量“删除”
class RefCountedClass
{
public:
RefCountedClass(Mutex& m) :
mutex_(m)
{}
.
.
.
private:
Mutex& mutex_;
void RemoveReference()
{
// As I understand, mutex_ will be destroyed after delete,
// but using m is all right because it is on-stack and
// references an external object. Am I right?
Mutex& m = mutex_;
m.Acquire();
--recount_;
if (refcount <= 0) delete this;
m.Release();
}
};
有对象的引用计数自己是一个坏主意(它可以告诉如果它是一个静态的生命周期(堆栈)或动态生命周期(堆)变量?这就是COM的工作方式,以及我们已经从C++社区获得的经验;从boost :: shared_ptr可以看出,引用计数是而不是参考对象的一部分。 – 2010-08-06 18:10:58
@MartinYork我同意你的观点。在一般情况下,我不会建议自己实施这样的参考计数。尽管如此,这是一个特例。幸运的是,在我的真实情况下,构造函数不是公有的,创建受到工厂对象的保护。 – FireAphis 2010-08-08 12:29:01