当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

用户名

假设我有这些课程。

资源.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是自己取消分配的,还是如果没有分配,我们是否需要做一些事情来取消分配它们?

杰斯珀·朱尔(Jesper Juhl)

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

简而言之; 是。

resources.clear();在析构函数中是多余的。unordered_map会自动当它被破坏(当被清除ResourceManager被破坏),这将自动销毁所有unique_ptr这将反过来取消分配其资源秒。你不需要做任何事情

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

unique_ptr :: release()是否调用析构函数?

使用std :: map时,包含unique_ptr的结构中的默认析构函数会导致编译错误

unique_ptr 两次调用析构函数

为什么在使用unique_ptr时没有调用析构函数?

unique_ptr析构函数的优势

std :: unique_ptr析构函数构造函数顺序

thread_local std :: unique_ptr版本未调用析构函数

静态unique_ptr两次调用析构函数

具有unique_ptr成员和自定义析构函数的对象的向量

std :: unique_ptr是否在其析构函数中将其基础指针设置为nullptr?

使用unique_ptr保护的析构函数

当基类具有受保护的析构函数时,创建unique_ptr <Base>

std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

为对象分配值时为什么调用构造函数和析构函数

从未调用过的shared_ptr对象的析构函数

是否可以在放置新分配的对象上不调用析构函数?

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

如何阻止析构函数在堆栈分配的对象上被调用?

定义移动分配运算符时,如何将包含unique_ptr的对象分配给其类型的矢量?

是否在Exit()上调用基本对象析构函数?

如果调用了子类的析构函数,是否可以停止对其基类的析构函数的调用?

使用Vector创建对象时如何调用析构函数

GDB:调用特定对象的析构函数时的断点

为什么来自unique_ptr析构函数的异常会终止程序?

用于 pimpl 的 Unique_ptr 用法 - 即使声明了析构函数也不会编译

std::unique_ptr 在虚拟析构函数上重置 SIGABRT

在具有受保护的析构函数的类中使用unique_ptr

如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

当析构函数在类主体中声明为unique_ptr作为同一类的成员时发生编译器错误