C++ 使用C++;作为缓冲区的向量
我使用vector作为缓冲区来存储一些对象,以便以后附加到另一个vectorC++ 使用C++;作为缓冲区的向量,c++,vector,append,C++,Vector,Append,我使用vector作为缓冲区来存储一些对象,以便以后附加到另一个vector std::vector<Link*> buffer_vector; std::vector<Link*> main_vector; main_vector.insert(main_vector.end(),buffer_vector.begin(),buffer_vector.end()); std::vector buffer\u vector; std::向量主向量; main_vecto
std::vector<Link*> buffer_vector;
std::vector<Link*> main_vector;
main_vector.insert(main_vector.end(),buffer_vector.begin(),buffer_vector.end());
std::vector buffer\u vector;
std::向量主向量;
main_vector.insert(main_vector.end(),buffer_vector.begin(),buffer_vector.end());
填充缓冲区和追加的过程重复进行。因此,我需要在每次迭代时清除缓冲区。我担心的是,如果使用.erase或.clear方法清除缓冲区,主向量中的对象将被删除。这个假设正确吗?
如果是,是否有解决方法
多谢各位
vahid如果您的意思是清除
缓冲向量
将清除主向量
中的内容,不,它们是单独的副本。如果您的意思是清除缓冲向量
将清除主向量
中的内容,不,它们是单独的副本。插入向量是通过副本完成的。换句话说,您正在将元素的副本推送到新向量中。清除缓冲向量时,将删除另一个副本
(这假设您将同一类型推入两个向量,而不是将指向第一个向量中向量的元素指针推入第二个向量。)插入向量是通过复制完成的。换句话说,您正在将元素的副本推送到新向量中。清除缓冲向量时,将删除另一个副本
(这假设您将同一类型推入两个向量,而不是将指向第一个向量中向量的元素的指针推入第二个向量。)您的问题不正确
main_vector.insert(main_vector.end(),buffer_vector.begin(),buffer_vector.end())代码>将元素从缓冲区向量
复制到主向量
这些复制的元素与原始元素完全分离,因此它们不会受到对它们所复制的元素的修改的影响。您的担心是不正确的
main_vector.insert(main_vector.end(),buffer_vector.begin(),buffer_vector.end())代码>将元素从缓冲区向量
复制到主向量
这些复制的元素与原始元素完全分离,因此它们不会受到对复制它们的元素的修改的影响。您正在将元素复制到向量中,并且它们将一直保留到删除它们为止。您正在将元素复制到向量中,它们将一直保留在那里,直到您删除它们。在您显示的代码中,您正在将指针存储到对象中。指针将被复制,当原始向量为清除
ed或元素擦除
d时,分配的内存将不会发生任何变化
实际上,当第二个向量超出范围时,指向的内存不会发生任何变化!!您的程序内存泄漏,您需要手动管理指针,或者选择一个合适的智能指针,您可以在向量中使用(考虑C++11中的std::unique\u ptr
或std::shared\u ptr
,或者boost或TR1中的等效程序)。在您显示的代码中,您正在将指针存储到对象中。指针将被复制,当原始向量为清除
ed或元素擦除
d时,分配的内存将不会发生任何变化
实际上,当第二个向量超出范围时,指向的内存不会发生任何变化!!你的程序内存泄漏,你需要手动管理指针,或者选择一个合适的智能指针,你可以在向量中使用(考虑C++11中的std::unique\u ptr
或std::shared\u ptr
,或者boost或TR1中的等价物)。你可能会对向量如何管理其对象感到困惑。当你把你推回到一个向量中时,你就复制了一个。当您向后推
指针时,它会复制指针。调用clear()
或erase()
时,会删除指针,但不会删除指针指向的对象
我假设您new
”编辑了所有链接
对象,并将它们添加到向量
容器中。您需要自己删除它们,容器不会为您销毁指向对象(即使容器本身在超出范围时被销毁)。如果在对所有Link
对象调用delete
之前clear()
两个容器,将导致内存泄漏(假设您没有将指向Link
对象的指针保留在其他地方)。您可能会对向量如何管理其对象感到困惑。当你把你推回到一个向量中时,你就复制了一个。当您向后推
指针时,它会复制指针。调用clear()
或erase()
时,会删除指针,但不会删除指针指向的对象
我假设您new
”编辑了所有链接
对象,并将它们添加到向量
容器中。您需要自己删除它们,容器不会为您销毁指向对象(即使容器本身在超出范围时被销毁)。如果在对所有Link
对象调用delete
之前clear()
两个容器,将导致内存泄漏(假设您没有将指向Link
对象的指针保留在其他地方)。哦,是的!这是指针向量。我正在更新我的问题。请在几分钟后阅读,不考虑元素是否为指针,vector::insert
将复制它们,因此操作是安全的。然后将复制指针。只需确保删除指针一次且仅删除一次。向量不会为您删除,只要您只从上一个向量中删除指针,