假设我有这些课程。
资源.h
template<typename T>
class Resource
{
protected:
// bunch of member variable
std::unique_ptr<T> resource;
public:
Resource();
~Resource();
};
资源管理器
template<typename T>
class ResourceManager
{
protected:
std::unordered_map<std::string, Resource<T>> resources;
public:
ResourceManager();
~ResourceManager()
{
resources.clear();
}
};
resources.clear()
从地图中删除所有元素,并调用对象的析构函数。我的问题是,unique_ptr是自己取消分配的,还是如果没有分配,我们是否需要做一些事情来取消分配它们?
当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?
简而言之; 是。
resources.clear();
在析构函数中是多余的。该unordered_map
会自动当它被破坏(当被清除ResourceManager
被破坏),这将自动销毁所有unique_ptr
这将反过来取消分配其资源秒。你不需要做任何事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句