带有共享指针的Std::unordered_map,用于自动销毁项

std::unordered_map with shared pointer for auto destruction of entries

本文关键字:用于 map 共享 指针 unordered Std      更新时间:2023-10-16

我有一个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));

很抱歉,我只是草草写了一下,还没有测试编译错误…

但是,这仍然不是一个非常优雅的解决方案。您可能需要退后一步,检查需要这样做的设计是否真的是最好的(和最简单的!)。