我有unordered_map<int, custom_object* >
并且有各种共享指针指向unordered_map
中的每个条目。这样的想法是,一旦所有共享指针被破坏,该条目将从unordered_map
中删除。 custom_object
当前包含密钥,以便它可以在销毁时从unordered_map
中删除相应的条目。我希望有一个更优雅的设计,或许可以实现unordered_map<int, shared_ptr<custom_object>>
。有什么想法吗?
答案 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));
对不起,我刚刚快速推出了这个并且没有测试它的编译错误......
但是,这仍然不是一个非常优雅的解决方案。您可能想退后一步,检查需要它的设计是否真的是最好的(也是最简单的!)。