我想問一個普遍的建議。下面的代碼完全編譯並粗略地表示我處理的代碼的結構。 簡而言之,我想將從基類(Class1)派生的一系列對象和其他一些參數從一個地方傳遞到另一個地方。更確切地說,實現父類的不同子類,收集這些類的實例並傳遞給參數進行處理。std ::要傳遞對象的對象/指針/智能指針的向量(buss error:10)?
問題是,你會推薦使用一個對象的向量或向量指針?我不介意從C++11
(std::unique_ptr
,std::shared_ptr
),如果這是一些新的東西去更好/更安全/更少的內存泄漏/等出於某種原因。我真的很感激,如果有人能夠爲這種情況提供建議的容器和/或提供一個使用C++11
的例子。
p/s/here UncleBens表示,如果/當拋出異常時,使用指針可能導致內存泄漏。所以也許我應該真的使用智能指針來完成任務?這看起來如何?
P/P/S /有趣的是,現實生活中的例子給我總線錯誤: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;
}
非常感謝您的詳細解答。將我的真實代碼改寫爲共享指針... – Denis
注意到您沒有在您的答案中定義「list」。我想這是'std :: vector',或者更好'boost :: shared_ptr>'? –
Denis
哎呀,是的,我錯過了。我已經更新了添加列表聲明的答案,它是共享ptrs的std :: vector。 –