c++ - 在 C++ 中从 vector<pointer*> 复制到 vector<pointer*>

标签 c++ stdvector

我创建了一个 vector A 并想通过以下方法复制到另一个类中的 vector B,这是正确的方法吗? vector A可能会被破坏!我在谷歌搜索,但没有找到好的解决方案和有意义的解释。谢谢大家

void  StateInit(vector<CButton*> listBtn) 
{ 
   _m_pListBtn = listBtn; 
 };

最佳答案

是也不是,您是按值传递 vector :

void  StateInit(vector<CButton*> listBtn) 
{ 
   _m_pListBtn = listBtn; 
 };

这意味着 listBtn 是 vector A 的拷贝(假设我们称 vector A 作为 StateInit 的参数传递),如果删除 vector A, vector B 仍将具有指针集合并且它们将有效,因为指针 vector 的破坏不会删除指向的对象,因为它现在不可能如何(它应该调用、删除、删除[]、释放吗?)。

请记住,如果您修改/删除 vector A 中的元素之一(使用 vector 上的指针),该元素将在 vector B 中被修改(因为它是指向同一元素的指针)。

我不确定你这样做的目的是什么,但如果你想复制整个 vector ,你应该为对象实现一个克隆机制,然后使用转换复制它们:

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()); 
 };

如果您的目的不是克隆它而是共享指针,您应该将 vector 作为指针或引用传递:

void StateInit(const vector<CButton*>& listBtn) 
{ 
   _m_pListBtn = listBtn; 
};

关于c++ - 在 C++ 中从 vector<pointer*> 复制到 vector<pointer*>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475042/

相关文章:

c++ - 基于 c++ 范围的 std::vector 迭代的顺序

c++ - 使用 std::map 而不是 vector<pair<string, string>> 我会看到性能提升吗?

c++ - 如何将一个 std::queue 的内容附加到另一个

c++ - 使用变量与变量指针作为函数的参数

python - 更改 Python swigged C 函数的返回值类型

c++ - 在类构造函数中使用单独类的对象

c++ - 终止随机搜索

C++:更新类的 vector 成员变量

c++ - 如何将 vector 列表存储为全局变量?

c++ - 为什么返回类型中需要 typename ? C++