带有共享指针的Std::unordered_map,用于自动销毁项
std::unordered_map with shared pointer for auto destruction of entries
我有一个unordered_map<int, custom_object* >
,并有各种共享指针指向unordered_map
中的每个条目。这个想法是这样的,一旦所有的共享指针被销毁,条目将从unordered_map
中删除。custom_object
当前包含密钥,因此它可以在销毁时从unordered_map
中删除相应的条目。我想有一个更优雅的设计,也许实现unordered_map<int, shared_ptr<custom_object>>
代替。对此有什么想法吗?
您可以为shared_ptr
使用自定义删除器来删除对象并将其从映射中删除:
class custom_object_deleter
{
public:
custom_object_deleter(unordered_map<int, custom_object*>* map) :
map(map)
{
}
void operator()(custom_object* object)
{
// Remove object from map.
delete object;
}
private:
unordered_map<int, custom_object*>* map
};
当你创建一个custom_object
时,这样做:
shared_ptr<custom_object> my_custom_object(new custom_object, custom_object_deleter(&map));
很抱歉,我只是草草写了一下,还没有测试编译错误…
但是,这仍然不是一个非常优雅的解决方案。您可能需要退后一步,检查需要这样做的设计是否真的是最好的(和最简单的!)。
相关文章:
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 尝试在 std::map 中插入抽象类时没有用于调用的匹配函数
- 一个类用于集合和字典 (map)
- 为什么我的"choose k from n"算法适用于 std::vector,而不适用于 std::map?
- map(long long int,long long int)不适用于key=1000 000 000(在long l
- 如何将置换列表应用于std :: map值
- 为什么智能感知不适用于map<int,T *>?
- Natvis 树项定义不适用于 map<int,int>
- std::multiset vs. std::<int>map<int, std::size_t> 用于保留多个可重复的整数值
- 为什么 const 不适用于 stl map 的 size(),而它非常适合其他容器
- 如何将重载的std::less用于std::map
- 将函数应用于std::map值,其中包含for each和lambda函数
- 用于从 std::map 的最后 n 个元素创建 std::vector 的惯用C++
- emplace_back不适用于 std::vector<std::map<int, int>>
- std::less<> 不适用于我的 std::map
- map非const函数,在clang++下编译时错误,适用于g++
- 将enum和string组合成一个类似map的变量,可以同时用于int和string
- std::wstring 不适用于 std::map<const wchar_t*、const char*的 [] 运算符>
- Map vs unordered_map用于少数元素
- 带有私有默认构造函数的Boost::serialization: object适用于vector,但不适用于map