我创建矢量A和需要通过使用以下方法来复制到在另一个类中的矢量B,它是正确的方式?矢量A可能被破坏!我在谷歌搜索,但没有找到好的解决方案和有意义的解释。谢谢大家复制到矢量用C++ <pointer*>
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
我创建矢量A和需要通过使用以下方法来复制到在另一个类中的矢量B,它是正确的方式?矢量A可能被破坏!我在谷歌搜索,但没有找到好的解决方案和有意义的解释。谢谢大家复制到矢量用C++ <pointer*>
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
是的,没有,你传递载体的价值:
void StateInit(vector<CButton*> listBtn)
{
_m_pListBtn = listBtn;
};
至极意味着listBtn是矢量A的副本(asuming我们呼吁矢量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;
};
有意义的解释,谢谢你的回答! – 2013-05-10 06:29:48
一个更好的方法是迭代新矢量和push_back
元素到你的矢量。
见示例代码:std::vector::begin
是的,看起来是正确的......只要你记得两个指针可以指向同一个对象。 – Beta 2013-05-10 04:18:45
更好地写你的函数'void StateInit(const vector&listBtn)'。现在写入的方式会将向量复制两次,一次到'listBtn'并再次到'_m_pListBtn'。没有意义。 –
john
2013-05-10 04:21:45
@john和Beta但是向量A将来能够被销毁,当我们在B中访问时它会使null异常吗?如果不是,我猜是因为我们做'_m_pListBtn = listBtn;'它只将listBtn中的所有元素复制到_m_pListBtn,它不会将矢量A的指针复制到矢量B中我是一个C++中的新人,对于一些愚蠢的问题进行翻译^^ – 2013-05-10 04:30:46