一般的なアドバイスをお願いします。以下のコードは完全にコンパイルされ、私が扱うコードの構造を大まかに表しています。簡単に言えば、ベース クラス (Class1) から派生した一連のオブジェクトと、その他のパラメーターをある場所から別の場所に渡したいと考えています。より正確には、親クラスのさまざまな子クラスを実装し、それらのインスタンスを収集して、パラメーターで処理するために渡します。
問題は、オブジェクトのベクトルまたはポインターのベクトルを使用することをお勧めしますか? これが何らかの理由でより良い/安全である/メモリリークが少ない/などC++11
である場合、 ( std::unique_ptr
、std::shared_ptr
)からいくつかの新しいものに行くことを気にしません。誰かが間違いなくそのような場合のコンテナについてアドバイスしたり、. C++11
p/s/ here UncleBens は、ポインターを使用すると、例外がスローされた場合にメモリ リークが発生する可能性があると述べています。それで、私は本当にタスクにスマートポインターを使用する必要がありますか? これはどのように見えますか?
p/p/s/ 面白いことに、実際の例では、からこれらのオブジェクト を使用しようとするとBus error: 10が表示されます。ただし、単純なケースではエラーを再現できません...Class2
std::vector< Container<d>*> / std::vector< Container<d>>
#include <string>
#include <iostream>
#include <vector>
template<int dim>
class Class1 {
public:
Class1() {};
~Class1() {};
};
template<int dim>
class Class2 : public Class1<dim>
{
public:
Class2() :
Class1<dim>() {};
};
template <int dim>
class Container
{
public:
Container( Class1<dim> & f, int param1) : c1(f), param_(param1) {}
Class1<dim> & c1;
int param_;
};
static const int d = 2;
int main()
{
int p = 1;
Class2<d> c2;
std::vector< Container<d> *> p_list;
std::vector< Container<d> > list;
{
p_list.push_back ( new Container<d> ( c2,p ) );
}
std::cout<<"from pointers: "<<p_list[0]->param_<<std::endl;
{
list.push_back( Container<d> ( c2,p ) );
}
std::cout<<"from objects: "<<list[0].param_<<std::endl;
}