带有共享指针的std :: unordered_map,用于自动销毁条目

时间:2014-07-09 02:09:53

标签: c++ shared-ptr unordered-map

我有unordered_map<int, custom_object* >并且有各种共享指针指向unordered_map中的每个条目。这样的想法是,一旦所有共享指针被破坏,该条目将从unordered_map中删除。 custom_object当前包含密钥,以便它可以在销毁时从unordered_map中删除相应的条目。我希望有一个更优雅的设计,或许可以实现unordered_map<int, shared_ptr<custom_object>>。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以为删除对象的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));

对不起,我刚刚快速推出了这个并且没有测试它的编译错误......

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