void ResourceManager::unload(ResourcePtr &res) { if (res->referCount() > 1) { Resource *r = res; res = nullptr; if (r->referCount() == 1) { // Only one instance is used. It should be deleted. auto itr = mResourceCache.find(r->getName()); if (itr != mResourceCache.end()) { // The resource is valid and in the cache. Resources &resources = itr->second; if (res->isCloned()) { // erase cloning resource resources.erase(r->getCloneID()); } else { // erase original resource resources.erase(0); } } } } else { res = nullptr; } }