当包含它的对象调用其析构函数时,unique_ptr是否未分配
Does unique_ptr get unallocated when the object containing it gets its destructor called?
假设我有这些类。
资源.h
template<typename T>
class Resource
{
protected:
// bunch of member variable
std::unique_ptr<T> resource;
public:
Resource();
~Resource();
};
资源管理器.h
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
,进而释放其资源。你不需要做任何事情。
每个
Resource()
实例的unique_ptr成员将被正确销毁,而无需添加任何额外的代码。
出于这个原因,你不需要显式调用clear()
,因为这将在ResourceManager
的实例被销毁时自动发生。
没有必要在堆上创建一个std::unique_ptr
(new std::unique_ptr(。
它的作用与简单的int
相同。当它超出范围时,它将被删除。删除std::unique_ptr
将调用unique_ptr
中对象的析构函数
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误