次のコードを検討してください。
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<>
ます。私の要件は基本的に次のとおりです。
- コンテナの一部であるオブジェクトの範囲の同じインスタンスを別のコンテナ インスタンスで共有する
- これら 2 つ以上のコンテナーで 1 つのインスタンスを共有したくない
- 1 つの要素が他のコンテナーから「突然」消去されたときに通知を受け取りたい (または、少なくともこれを確認してください。たとえば、 のようなものです
shared_ptr::unique()
) 。
両方のコンテナーは同じクラスの一部です。したがって、それらは同じスコープを持ち、同時に破棄されます。これらのクラスのコンストラクターは、両方のコンテナーを構築します。建設後、これらのコンテナに変更はありません。
std::vector<>
代わりにofを使用する必要shared_ptr<>
がありますか、それとも他の解決策はありますか?