我创建了一个向量 A 并想使用以下方法复制到另一个类中的向量 B,这是正确的方法吗?向量 A 可能被破坏!我在谷歌搜索,但没有找到好的解决方案和有意义的解释。感谢大家
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
是和否,您正在按值传递向量:
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
这意味着 listBtn 是向量 A 的副本(假设我们调用向量 A 作为 StateInit 的参数传递的那个),如果您删除向量 A,向量 B 仍将具有指针集合,并且它们将在销毁后有效指针向量不会删除指向的对象,因为它现在不可能(应该调用、删除、删除 []、免费吗?)。
请记住,如果您修改/删除向量 A 中的一个元素(使用向量上的指针),该元素将在向量 B 中被修改(因为它是指向同一元素的指针)。
我不确定你的意图是什么,但如果你想复制整个向量,你应该为对象实现一个克隆机制,然后使用转换复制它们:
class cloneFunctor {
public:
T* operator() (T* a) {
return a->clone();
}
}
然后只是:
void StateInit(vector<CButton*> listBtn)
{
transform(listBtn.begin(), listBtn.end(), back_inserter(_m_pListBtn), cloneFunctor());
};
如果您的意图不是克隆它而是共享指针,则应将向量作为指针或引用传递:
void StateInit(const vector<CButton*>& listBtn)
{
_m_pListBtn = listBtn;
};
更好的方法是迭代新向量和向量push_back
的元素。
参见示例代码:std::vector::begin