将指针从vector2传递到vector1并安全清除vector1? 我还是C++的新手,这可能是一个简单的答案,但是我有一个向量,它保存一些指向对象的指针,我把指针指向另一个向量。清除第二个向量是否会导致孤立或内存泄漏之类的问题

将指针从vector2传递到vector1并安全清除vector1? 我还是C++的新手,这可能是一个简单的答案,但是我有一个向量,它保存一些指向对象的指针,我把指针指向另一个向量。清除第二个向量是否会导致孤立或内存泄漏之类的问题,c++,pointers,C++,Pointers,编辑: 我想我不清楚,这里有一个例子 #include <vector> std::vector<SomeObject*> objects1; # Assume this is filled with objects std::vector<SomeObject*> objects2; # Empty for (unsigned int i = 0; i < objects1.size(); i++) { objects2.push_back

编辑: 我想我不清楚,这里有一个例子

#include <vector>

std::vector<SomeObject*> objects1; # Assume this is filled with objects
std::vector<SomeObject*> objects2; # Empty

for (unsigned int i = 0; i < objects1.size(); i++)
{
    objects2.push_back(objects1[i]);
}
# There's some code in between, the objects themselves aren't modified
# it's just organization
objects2.clear(); # The question is about this line here
#包括
std::vector objects1;#假设这是由对象填充的
std::vector objects2;#空的
for(无符号整数i=0;i
如果您所说的指针是原始指针,则不是。销毁原始指针不会对它们指向的内容产生任何影响

(除非它是指向动态分配的内存卡盘的最后一个指针,在这种情况下,您正在泄漏内存。)

首先,您有一组指向对象的指针,然后您有另一组指向相同对象的指针(即,指针是相同的)。然后去掉第二组指针

它可以更容易地写成:

objects2 = objects1;
通过成员复制,其功能与您的成员完全相同


如果这些指针的语义为
std::unique\u ptr
,那么您就不能将它们复制到另一个向量。如果“给予”的意思是“移动”,那么清除第二个向量将释放这些指针指向的内存



如果这些指针具有
std::shared_ptr
的语义,那么通过将它们赋给另一个向量,您只是在增加引用计数,并且假设第一个向量中的原始指针没有移动,则清除第二个向量只会将引用计数减回到之前的值。

移动:否,删除:Yes清除向量不删除任何存储在里面的指针,如果这是你的疑问。因为你是C++的新手,我假设你使用的是普通指针。在这种情况下,@πάντα不会有任何问题ῥεῖ 如果指针是唯一的或共享的(如果计数达到0),清除可以删除@knightrider我说的当然是原始指针!谢谢你的优化提示。我会在以后的项目中记住这些信息