请考虑以下代码:
int main()
{
typedef boost::ptr_vector<int> ptr_vector;
ptr_vector vec0;
vec0.push_back(new int(1));
vec0.push_back(new int(2));
vec0.push_back(new int(3));
vec0.push_back(new int(4));
vec0.push_back(new int(5));
ptr_vector::iterator last = boost::prior(vec0.end()),
first = boost::prior(last, 3);
ptr_vector vec1(first, last); // this will copy '2, 3, 4' to vec1
struct print
{
void operator()(int const& i) {
std::cout << i.m_i << std::endl;
}
};
std::for_each(vec0.begin(), vec0.end(), print()); // 1, 2, 3, 4, 5
std::for_each(vec1.begin(), vec1.end(), print()); // 2, 3, 4
return 0;
}
我不想copy
将元素放入vec1
,而是以提供的方式共享shared_ptr<>
。我的要求基本上是:
- 在另一个容器实例中共享作为容器一部分的一系列对象的相同实例
- 不想在超过这两个容器中共享一个实例
- 希望在一个元素“突然”从另一个容器中删除时收到通知(或者至少检查一下,例如类似的东西
shared_ptr::unique()
)
两个容器都属于同一类。因此,它们具有相同的范围,并且将同时被销毁。这些类的构造函数构造了两个容器。建造完成后,这些容器不会有任何修改。
我需要使用 a std::vector<>
ofshared_ptr<>
还是有其他解决方案?