Example #1
0
void Resource::unref() const {
    Resource* r = (Resource*)this;
    if (r->refcount_ != 0) {
	r->refcount_ -= 1;
    }
    if (r->refcount_ == 0) {
	r->cleanup();
	delete r;
    }
}
Example #2
0
void Resource::unref_deferred() const {
    Resource* r = (Resource*)this;
    if (r->refcount_ != 0) {
	r->refcount_ -= 1;
    }
    if (r->refcount_ == 0) {
	r->cleanup();
	if (ResourceImpl::deferred_) {
	    if (ResourceImpl::deletes_ == nil) {
		ResourceImpl::deletes_ = new ResourceList;
	    }
	    ResourceImpl::deletes_->append(r);
	} else {
	    delete r;
	}
    }
}