我创建一个向量 A 并想使用以下方法复制到另一个类中的向量 B,这是正确的方法吗?向量A可能会被破坏!我在谷歌搜索,但没有找到好的解决方案和有意义的解释。感谢大家
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
是的,也不是,您正在按值传递向量:
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
这意味着 listBtn 是向量 A 的副本(假设我们将向量 A 称为作为 StateInit 参数传递的向量 A),如果删除向量 A,向量 B 仍将具有指针集合,并且它们将在销毁后有效。指针向量不会删除指向的对象,因为现在不可能如何(它应该调用、删除、delete[]、free?)。
请记住,如果您修改/删除向量 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;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)