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