1
我正在寻找一种方法来模拟“作用域迭代器”(缺少更好的短语)。基本上,我想从一个集合(在这种情况下为map)获取一个迭代器,并将其包装在一个“范围迭代器”中,一旦最后一个引用被删除,该集合将从集合中删除元素/迭代器。我目前的做法在下面,但我正在寻找更优雅的东西。作用域/参考计数迭代器
typedef std::map<int,bool> map_type;
typedef map_type::iterator iter_type;
void iterDelete(std::shared_ptr<map_type> map, iter_type * iter)
{
map->erase(*iter);
delete(iter);
}
int main()
{
std::shared_ptr<map_type> myMap(new map_type()); //std::map because iterators are not invalidated by erase/insert
iter_type myIter = myMap->find(7);
std::shared_ptr<iter_type> scopedIter(new iter_type(myIter), std::bind(iterDelete, myMap, std::placeholders::_1)); //Deleters keep map in scope until all "scoped iterators" die.
}
我希望比使用shared_ptr更优雅。另外,我保证我不会在实际代码中使用void main();这只是为了简洁。 :-) – tgoodhart
@tgoodhart:'int main()'为了简洁起见更好:) – UncleBens
@tgoodhart:如果你想引用计数,不要重新发明轮子,使用'shared_ptr'。 – Puppy