我有一个异构对象的缓存,按名称存储。请注意,它们没有通用的基类。在创建时我还必须存储一个 Deleter 对象(因为我知道当时的类型),所以地图如下所示:
map<string, pair<void *, Deleter> > data;
每当检索到对象时(通过模板化方法),它就会被转换回请求的类型。缓存的析构函数只是调用 Deleter 并从映射中删除该对。这一切都有效。
但是,如果 C++11 允许我执行以下操作,那就太好了:
map<string, unique_ptr_base> data;
其中 unique_ptr_base 将是所有 unique_ptr 的(虚构的)基类,其虚拟析构函数将删除该项目。然后我可以简单地从地图中删除该项目,而不用担心解除分配。
为此目的编写一个特殊的类并不太难,但在这种情况下是不合理的,因为目前的方式只占用了一行,并且不存在意外泄漏指针的危险。那么,我忽略了新标准的某些功能,还是应该保持原样?