我想編寫一個有效的執行下面的複合物類:C++的std ::向量構造
class composite{
vector<base_class *> Vec;
//Other useful constants
public:
composite(vector<base_class*>);
//Other useful operations...
};
我的問題是關於類的構造函數和實例,尤其是對象VEC。在那一刻,我使用下面概述的相當粗糙的實現。我的實現是記憶效率。我幾乎是一個C++的新手,所以我不知道我在這裏有最佳的解決方案...
我使用多態性來存儲不同派生類的向量,例如,
vector<base_class *> Vec1;
Vec1.reserve(2);
class1 * C1 = new class1(....);
Vec1.push_back(C1);
class2 * C2 = new class(....);
Vec1.push_back(C2);
其中class1和class2是派生的base_class類。然後我通過VEC 1到複合材料的構造如下:
composite::composite(vector<base_class*> Vec1){
Vec.reserve(Vec1.size());
Vec.swap(Vec1);
//etc...
}
我的感覺是,這是在內存相當有效,因爲VEC 1將是(它的元素都被交換到VEC)施工後空。另一方面,這似乎很浪費,因爲我基本上是將Vec1複製到Vec中。有沒有更好的方法來做到這一點?我可以以某種方式將矢量Vec1嵌入到複合材料中嗎?提前致謝!
原始指針的'std :: vector'是一個完全錯誤的想法。您想要使用唯一或共享指針的向量,具體取決於這些對象擁有的所有權。 – Griwes
也可以在構造函數中使用&,或&&作爲向量,並將其明確。 – doctorlove