我想请教一个一般性的建议。下面的代码完全编译并大致代表了我处理的代码的结构。简而言之,我想将一系列从基类(Class1)派生的对象和一些其他参数从一个地方传递到另一个地方。更准确地说,实现父类的不同子类,收集这些子类的实例并通过参数进行处理。
问题是,您会建议使用对象向量还是指针向量?如果出于某种原因这更好/更安全/更少的内存泄漏/等,我不介意从C++11
( std::unique_ptr
, std::shared_ptr
)中寻找一些新的东西。如果有人可以为这种情况提供有关容器的建议和/或提供使用. C++11
p/s/这里UncleBens 说,如果/当抛出异常时,使用指针可能会导致内存泄漏。所以也许我真的应该使用智能指针来完成任务?这看起来如何?
p/p/s/ 很有趣,现实生活中的例子给了我Bus error: 10 when I try to use those Class2
objects from 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;
}