0

boost::ptr_vector にランダムに割り当てたい。通常の STL ベクトルを使用すると、次のようになります。

class A{

};

A* a1 = new A();
A* a2 = new A();

vector<A*> normal_vec;
normal_vec.resize(2);
normal_vec[1] = a1;
normal_vec[0] = a2;

私はboost::ptr_vectorで同じことをしようとしています:

A* a1 = new A();
A* a2 = new A();

ptr_vector<A> boost_vec;
boost_vec.resize(2);

boost_vec[1] = a1;
boost_vec[0] = a2;

しかし、次のエラーが発生しています:

no match for ‘operator=’ in ‘v.boost::ptr_vector<A>::<anonymous>.boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::operator[] [with T = A, VoidPtrSeq = std::vector<void*, std::allocator<void*> >, CloneAllocator = boost::heap_clone_allocator, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::reference = A&, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::size_type = long unsigned int](1ul) = a1’

しかし、これを理解するのに苦労しています

4

2 に答える 2

2

ptr_vector<T>::replaceの代わりに使用する必要がありoperator[]ます。の代わりに がoperator[]返されるため、ポインターではなく値のみを割り当てることができます。T&T*&

また、次のコードでnewスローa2の2 番目が削除されていない場合、メモリ リークが発生することにも注意してください。a1

A* a1 = new A();
A* a2 = new A();

の使用を検討してくださいstd::unique_ptr

于 2012-11-14T15:09:15.750 に答える
0

また、プログラムにバグがあることに注意してください。インデックスは 1 ではなく 0 から始まります。

于 2012-11-14T15:14:17.373 に答える