有没有一种方法可以避免在使用boost :: base :: collection时使迭代器失效?

时间:2018-12-08 06:06:26

标签: c++ boost iterator

最近,我一直在寻找C++中使用的多态集合,并遇到了boost的base_collection。我对此很满意,但是插入后集合迭代器变得无效,这严重限制了它的使用范围:

#include <boost/poly_collection/base_collection.hpp>

class base
{
public:
    ////
    const string& get_name() const
    {
        return name;
    }

    ////
};

class derived : public base
{
    ////
};

int main()
{
    boost::base_collection<base> collection;
    auto iterator = collection.insert(derived{"test"});
    std::cout << iterator->get_name(); //"test"

    for(auto i{0}; i < 100; ++i)
        collection.insert(derived{"test" + i});
    std::cout << iterator->get_name(); //not "test" anymore

    return 0;
} 

指定自定义分配器(例如boost::pool)并不会解决问题,因为显然base_collection始终使用::new来分配存储空间。

有人对如何使迭代器保持有效有任何想法吗?

0 个答案:

没有答案